1. 程式人生 > >day10---作用域 預編譯 立即執行函式

day10---作用域 預編譯 立即執行函式

作用域–外層函式無法訪問裡層函式的變數,裡層函式能呼叫外層函式的變數。

未經宣告的變數歸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)正負號+ - 和非 ! 會將後面的東西變成表示式!!!

——-在努力,再努力