nice,終于在這里找到答案。補充一下,如果是想要在calc中使用scss函數(shù)調(diào)用的結(jié)果,也是這樣把函數(shù)調(diào)用寫在#{ } 里面
sass中使用calc計算表達(dá)式變量問題calc()是css的一個函數(shù),可用于元素計算長度,比如div寬度想要減去一個固定寬度后并自適應(yīng),可以寫為calc(100% - 60px) 注意“-”兩邊有空格 sass已...
nice,終于在這里找到答案。補充一下,如果是想要在calc中使用scss函數(shù)調(diào)用的結(jié)果,也是這樣把函數(shù)調(diào)用寫在#{ } 里面
sass中使用calc計算表達(dá)式變量問題calc()是css的一個函數(shù),可用于元素計算長度,比如div寬度想要減去一個固定寬度后并自適應(yīng),可以寫為calc(100% - 60px) 注意“-”兩邊有空格 sass已...
關(guān)于 Commonjs 和 ES module 模塊導(dǎo)出的區(qū)別,一般流行一種說法:CommonJS 模塊輸出的是一個值的拷貝,ES6 模塊輸出的是值的引用,而我發(fā)現(xiàn),絕大部分...
function f1(x=1,y=()=>{x=10;}){
var x;
y();
console.log(x);
}
f1(); //1
還有一個問題是這里的輸出結(jié)果。既然已經(jīng)在函數(shù)體內(nèi)作用域找到了未賦值的x,為什么最后不是輸出undefined而是輸出1呢?輸出1就好像其實打印的是參數(shù)x而不是函數(shù)體內(nèi)的x一樣,或者說打印的確實是函數(shù)體內(nèi)的x,只是已經(jīng)被賦值1了?但是也覺得不太對勁。
es6函數(shù)默認(rèn)參數(shù)作用域小記使用默認(rèn)參數(shù)時,參數(shù)會形成一個獨立的作用域,此作用域與函數(shù)體中的作用域是平行關(guān)系 經(jīng)過測試發(fā)現(xiàn),此段代碼如果使用babel編譯成es5~輸出結(jié)果為 2 2 0 這個結(jié)果和開頭...
為了回復(fù)特意注冊了簡書。我贊同你的看法,這里參數(shù)作用域和函數(shù)體作用域?qū)嶋H上就是父子嵌套的關(guān)系,查找變量的時候就是沿著作用域鏈追溯。所以其實最后就剩一個比較奇怪的問題,就是你說的let報錯的問題,這個問題的確會讓這兩個作用域看起來是共享的而不是嵌套的。http://dmitrysoshnikov.com/ecmascript/es6-notes-default-values-of-parameters/ 上面你發(fā)的文章的原作者有在評論里講到這個問題,但是我的英文水平略吃力,沒有g(shù)et到作者的點,這里粘貼一下:
thanks, and great question. This just per spec, the let bindings inside the main function body are checked against the the parameter names (forbidding the duplicates). Though to confirm that a separate scope is created, you can replace the x in the body to var, and the f closure should still print 2, not 5.
真心希望有看到回復(fù)的話可以一起探討這個問題。
es6函數(shù)默認(rèn)參數(shù)作用域小記使用默認(rèn)參數(shù)時,參數(shù)會形成一個獨立的作用域,此作用域與函數(shù)體中的作用域是平行關(guān)系 經(jīng)過測試發(fā)現(xiàn),此段代碼如果使用babel編譯成es5~輸出結(jié)果為 2 2 0 這個結(jié)果和開頭...
1.我覺得用上下層關(guān)系來解釋形參列表的獨立作用域和函數(shù)體的作用域更好,因為
var x = 0;
function foo(x, y = function(){ console.log(x); x = 2; console.log(x); }) {
x = 3;
y();
console.log(x);
}
可以理解成函數(shù)體沒有變量x,向上一層作用域(形參列表的獨立作用域)查找變量x,找到參數(shù)x;
2.此外,有個用上下層的思路解釋不通的例子:
var x = 0;
function foo(x, y = function(){ console.log(x); x = 2; console.log(x); }) {
let x = 3; //報錯:Identifier 'x' has already been declared
y();
console.log(x);
}
這說明函數(shù)體的作用域已經(jīng)有變量x了,至于這個x和foo函數(shù)的參數(shù)x有什么關(guān)系,我也想不通。
3.有一個文章也講了這些東西:http://bosn.me/articles/es6-default-param/
他對上面let報錯只概括了一下:“另外,需要注意到只有變量(var)和函數(shù)允許重復(fù)聲明,而用let/const重復(fù)聲明參數(shù)是不允許的”