鍍金池/ 問答/ HTML問答
默念 回答

import {Names} from './constant.js'
步一、進(jìn)行import的時(shí)候,webpack調(diào)用__webpack_require__方法,將模塊(constant)緩存放入installedModules中 如圖
圖片描述

步二、模塊constant.js內(nèi)部會(huì)被編譯成如下 圖片描述

步三,在index.js 中 將導(dǎo)入進(jìn)來的模塊constant賦值給變量_constant,而Names只是_constant的一個(gè)屬性,所以Names不在作用域中,報(bào)出 referenceError錯(cuò)誤。

圖片描述

圖片描述

這個(gè)適用于所有import,將導(dǎo)入的模塊緩存,使用的時(shí)候賦值給新變量,導(dǎo)入的所有方法或者變量都變成了新變量的一個(gè)屬性,所以不存在作用域中

貓小柒 回答

div和ul,都是塊狀元素,如果你需要讓他在一行里顯示,那么可以使用css把他改為行內(nèi)元素即可
style="display:inline;"

孤毒 回答

watch

data:{
    cc:''
}
            watch: {
                cartData: {
                    handler(val) {
                        console.log(val)
                        this.cc = val.every(item1 => {
                            return item1.goodsList.every(item2 => {
                                return item2.checked == true
                            })
                        })
                    },
                    deep: true
                }
            },

computed

            computed: {
                cc() {
                    return this.cartData.every(item1 => {
                        return item1.goodsList.every(item2 => {
                            return item2.checked == true
                        })
                    })
                }
            }
挽青絲 回答
公司有一個(gè)需求是寫一個(gè)表單 然后需要打印 因?yàn)槭窃跊]有webview的環(huán)境下 所以出來的頁面是沒有加載的

我看了一下這個(gè)系統(tǒng)需要登陸的, 你這個(gè)url可以直接登陸么? 你要執(zhí)行的js是登陸前的頁面還是登陸之后的?

在我的打印這一欄并沒有任何東西 所以可能是我的js并沒有加載?
但是我的js是獲取到了的

你憑什么覺得js加載了?

PS: 斧頭已經(jīng)不維護(hù)了,推薦使用Google官方出品 的 puppeteer

落殤 回答

可能因?yàn)槟愕淖C書是自簽發(fā)的。瀏覽器不承認(rèn)

還吻 回答

map相對(duì)應(yīng)的還有reduce,習(xí)慣于函數(shù)式編程的人格外喜歡用。比如前端框架React及其生態(tài)系統(tǒng),用map就很多。當(dāng)然,我只是描述了一下現(xiàn)象,具體的文章https://research.google.com/archive/mapreduce.html

誮惜顏 回答

沒怎么看明白,你是要定義屬性名稱?獲取到數(shù)據(jù)之后遍歷$set不行么

value一般是指表單的元素的值,比如input,.的話是獲取對(duì)象的一種方式,比如

var abc={name:'花非花'}
abc.name ==>指向的就是"花非花"
冷咖啡 回答

一行一行解釋源碼,估計(jì)也不太好理解;我們從另外一個(gè)角度來看這個(gè)問題。

返回的是動(dòng)態(tài)函數(shù)

首先看 bonusCombination 函數(shù)的返回語句是:return (new Function(str)).apply(null, [arr, fun])。這條語句的分解如下::

  • new Function(str) :含義是利用 str 字符串動(dòng)態(tài)構(gòu)造出函數(shù),我們暫且稱這個(gè)構(gòu)造出來的函數(shù)名為 strFn (即 var strFn = new Function(str)
  • 這樣就有 strFn.apply(null, [arr, fun]),轉(zhuǎn)換成我們平時(shí)可以理解的形式就是 strFn(arr, fun)

從這里我們可以看出,這個(gè) bonusCombination 的目的是動(dòng)態(tài)構(gòu)建一個(gè)函數(shù) strFn,該函數(shù)接受兩個(gè)入?yún)?arrfun —— 而這兩個(gè)入?yún)⒕褪俏覀儌鹘o bonusCombination 的入?yún)ⅲ?/p>

對(duì)應(yīng)你給的例子,這里的 arr 就是 [1,2,3,4],而 funnull

入?yún)?num 的作用,動(dòng)態(tài)創(chuàng)建函數(shù)體

我們知道 bonusCombination 還有一個(gè)入?yún)?,就?num,它的作用就是 鍛造 上述動(dòng)態(tài)函數(shù) strFn 的具體內(nèi)容,利用這個(gè) num 入?yún)碛绊懩且淮蠖巫址僮鳎@樣也就影響了動(dòng)態(tài)函數(shù)的具體內(nèi)容:

函數(shù)體內(nèi)容

對(duì)于閱讀這樣的函數(shù),要理解它的含義,最好的辦法就是枚舉。

比如我們讓 num2:那么動(dòng)態(tài)構(gòu)建的函數(shù) strFn 結(jié)構(gòu)體如下:

var strFn2 = function(arr, fun){
  var arr=arguments[0]; 
  var fun=arguments[1];  
  var ret=[]; 
  for (var a = 0; a < arr.length; a++) {
    for(var b = a + 1; b < arr.length; b++){
        var temp = [];
          temp.push(arr[a]); 
          temp.push(arr[b]); 
          if(fun){
            ret.push(fun(temp));
        } else {
            ret.push(temp); 
        }
    } 
  };
  return ret;
}

可見函數(shù)體內(nèi)包含 2 次循環(huán)(因?yàn)?num 值為 2),返回的 ret 就是結(jié)果值;

也就說調(diào)用 bonusCombination([1,2,3,4],2) 就相當(dāng)于調(diào)用 strFn2([1,2,3,4]),返回值就是你題中的 [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]] 。

同樣如果我們讓 num3:那么動(dòng)態(tài)構(gòu)建的函數(shù) strFn 結(jié)構(gòu)體如下:

var strFn3 = function(arr, fun){
  var arr=arguments[0]; 
  var fun=arguments[1];  
  var ret=[]; 
  for (var a = 0; a < arr.length; a++) {
    for(var b = a + 1; b < arr.length; b++){
      for(var c = b + 1; c < arr.length; c++) {
        var temp = [];
          temp.push(arr[a]); 
          temp.push(arr[b]); 
          temp.push(arr[c]);
          if(fun){
            ret.push(fun(temp));
        } else {
            ret.push(temp); 
        }
      }
    } 
  };
  return ret;
}

函數(shù)體內(nèi)包含 3 次循環(huán)(因?yàn)?num 值為 3);此時(shí)調(diào)用 bonusCombination([1,2,3,4],3) 就相當(dāng)于調(diào)用 strFn3([1,2,3,4]),返回值是 [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]

你也可以自己試一下讓 num4 或者 1,寫出的函數(shù)體內(nèi)容是怎么樣的,你就能徹底明白這個(gè) bonusCombination 函數(shù)的作用了。

回答你的問題

問題1:看不懂為什么用字符串做變量,這個(gè)方法還有其他的功能嗎?
回答:字符串做變量就是為了動(dòng)態(tài)構(gòu)造函數(shù)體內(nèi)容,依據(jù) num 的不同值動(dòng)態(tài)生成不同的 strFn 函數(shù) —— 從這個(gè)角度上來講 bonusCombination 就是一個(gè) 工廠函數(shù);

該方法還有另外的功能,體現(xiàn)在入?yún)?fun 上,可以對(duì)每個(gè)結(jié)果元素調(diào)用 fun(temp),相當(dāng)于使用數(shù)組的 map 功能。

問題2:一開始為什么定義一個(gè) variable;
回答:主要是為動(dòng)態(tài)函數(shù)體提供足夠多的中間變量,沒啥具體含義,只要是符合 js 變量名稱就可以。這里使用 a、b... 這些變量名,估計(jì)是為了簡單起見,你可以用任何符合 js 變量名稱規(guī)范的字符串就行。

問題3:請(qǐng)一步一步來解釋
回答:讀懂上面兩小節(jié)的分析或者參考前一個(gè)回答,每一行解釋這里就不附上了。

其他

這種利用 Function 動(dòng)態(tài)函數(shù)構(gòu)造出來的功能函數(shù),性能堪憂;
你也知道,如果 arr 入?yún)?shù)組越長,num 越大,那么嵌套的循環(huán)體也就越多,性能就越差。

這樣的代碼雖然能運(yùn)行,但質(zhì)量比較糟糕,還有很大的性能隱患,不能放在線上正式的產(chǎn)品中使用。這段代碼比較適合用來學(xué)習(xí) Function 的功能,以及 組合數(shù)學(xué) 的相關(guān)知識(shí)。

這種方式的編程屬于 元編程 范疇,可以參考我最近寫的文章 《【資源集合】 ES6 元編程(Proxy & Reflect & Symbol)》了解更多。后續(xù)有機(jī)會(huì),我看能否使用 Proxy & Reflect 來重寫這個(gè) bonusCombination 函數(shù)。

耍太極 回答

immutable.js
但我并不覺得用了這個(gè)你就沒問題了,你的主要問題還是太菜了

苦妄 回答

為什么不是后端查詢完數(shù)據(jù)(3w)然后一次給你呢?

要知道網(wǎng)絡(luò)IO是非常耗費(fèi)性能的

蝶戀花 回答

button和input[type="button"]點(diǎn)擊事件綁定是不一樣的

柒槿年 回答

把 pathRewrite 刪了重新 run 一下試試