1 //變量提早 並非賦值提早,變量a提早此時a的值爲undefined,而同名的函數提早,將會覆蓋變量a,使a的值爲函數。 2 var a; 3 a=()=>{ 4 console.log(11) 5 }; 6 console.log(a);
1 // 改變變量a的聲明位置,結果依然同樣。究其緣由:變量提高,並不包含變量複製的提高。 2 a=()=>{}; 3 var a; 4 console.log(a);//a的值依然是函數。
也能夠這麼認爲在聲明變量和顯示聲明函數的時候,函數的值會覆蓋變量。函數
對於變量覆蓋:只是針對從新聲明變量。spa
1 var k; 2 var k=2; 3 console.log(k); 4 m=()=>{console.log(131231)}; 5 var m; 6 console.log(m); 7 n=()=>{console.log(1)}; 8 n=()=>{console.log(2)}; 9 console.log(n);
1 //若是進行覆蓋,不能夠從新聲明變量,直接調用改變。 2 var cl1=22; 3 dd1=()=>{ 4 cl1=33; 5 }; 6 dd1(); 7 console.log(cl1);
若是在聲明變量不加var,他會從當前域中是否存在該變量,若是沒有,繼續去上一層做用域查找,若是有就覆蓋,若是沒有繼續查找,直到查找到頂層做用域。最後沒有的話。會將該變量掛載在window對象中做爲屬性或者方法。做爲全局變量,咱們能夠直接調用也能夠直接使用window.變量名字
1 /** 2 * 若是在聲明變量不加var,他會從當前域中是否存在該變量,若是沒有,繼續去上一層做用域查找,若是有就覆蓋,若是沒有繼續查找,直到查找到 3 * 頂層做用域。最後沒有的話。會將該變量掛載在window對象中。 4 */ 5 fn=()=>{ 6 a=2; 7 }; 8 fn(); 9 console.log(window.a)
關於函數中形參,至關於在函數局部做用域中聲明一個變量 var 變量名。並不會覆蓋不一樣做用域的同名標識符。
1 /** 2 * 關於函數中形參,至關於在函數局部做用域中聲明一個變量 var 變量名。並不會覆蓋不一樣做用域的同名標識符。 3 */ 4 var cc; 5 cc=123; 6 cc1=(cc)=>{//至關於從新聲明一個變量在函數局部做用域。var cc; 7 cc=2123;//對於形參cc從新賦值。arguments[0]=2123同樣的效果。 8 console.log(cc); 9 }; 10 cc1(cc);//注意在調用函數進行傳參的時候傳遞的是值。對於基本類型傳遞的是數值。而對於對象傳遞是內存地址不是引用。 11 console.log(cc);