day10---作用域 預編譯 立即執行函式
阿新 • • 發佈:2018-12-14
作用域–外層函式無法訪問裡層函式的變數,裡層函式能呼叫外層函式的變數。
未經宣告的變數歸window所有 如a=10
,一切宣告的全域性變數歸window所有。
預編譯: 函式的預編譯發生在執行函式之前。 預編譯四部曲: 1.建立AO物件; 2.找形參和變數宣告,將變數和形參名作為AO屬性名,值為undefined; 3.將實參值和形參統一; 4.在函式體裡面找函式宣告,值賦予函式體。
AO{ foo:function foo(){}; } function bar(){ return foo; foo=10; function foo(){} } console.log(bar());
該函式的返回值為function foo(){ }。
立即執行函式
在函式後新增“()”,執行完即被銷燬。
寫法:( function ( ) { … } ( ) )或 ( function ( ) { … } ) ( )
如
(function (){ var a = 123; var b = 234; console.log(a+b); }())
立即執行函式也可以引入引數。
如
(function (a,b,c){
console.log(a+b*c)
}(1,2,3))
此時輸出值為7。
注:1)只有表示式才能被執行!!!
var demo=function(){ console.log('a'); }();
執行一次後demo已不是函式。 2)若在函式申明後加執行符號()會報錯。 3)正負號+ - 和非 ! 會將後面的東西變成表示式!!!
——-在努力,再努力