參考文獻
一、在宣告區域性變數前,呼叫區域性變數返回undefind
function f()
f(); //undefind
二、在全域性變數賦值前,呼叫全域性變數會報error: a is not definedfunction f()
f(); //error: a is not defined
思考:上面兩個例子都是在沒有賦值之前就呼叫了變數,為什麼區域性變數可以通過編譯,而全域性變數會報錯呢?
答:在預編譯期,解析器會對所有var 和 fuction 進行宣告,因為全域性變數沒有var,不能宣告所以會報錯。
注意:js的解析過程分為兩個階段:預編譯期(預處理)與執行期。思考題1:預編譯期:js會對本**塊中的所有var宣告的變數和function 宣告的函式進行處理,但需要注意的是此時處理函式的只是宣告式函式,而且變數也只是進行了宣告但未進行初始化以及賦值。
執行期:會按照**塊的順序逐行執行。。
函式內全域性賦值一次,var宣告一次 函式f()內還是會優先使用自己的變數a
var a = 1;
function f()
f(); //undefined 2 和 3
alert(a); //1
經典問題 思考題2:var a, b;
(function() )();
alert(a); //undefined
alert(b); //3
IIFE為什麼不會汙染全域性變數
在開發過程中見到的iife,函式表示式都是匿名的,如果我們把它寫成命名函式表示式,那全域性作用域中豈不是多了乙個變數,這樣又怎麼能保證不會汙染全域性變數呢?通常我們在談論iife時,都是在談論它的用法,模組化,閉包等等,卻少有提及它為什麼可以拿來做模組化,為什麼不會汙染全域性變數。本文雖然是在說ii...
為什麼在js當中沒有var就是全域性變數
因為,在js中,如果某個變數沒有var宣告,會自動移到上一層作用域中去找這個變數的宣告語句,如果找到,就是用,如果沒找到,就繼續向上尋找,一直查詢到全域性作用域為止,如果全域性中仍然沒有這個變數的宣告語句,那麼自動在全域性作用域進行宣告,這個就 是js中的作用域鏈,也叫變數提公升 示例如下 var ...
設定全域性變數為什麼沒有成功!!!
問題描述 見 紅色部分 demo3 1.cpp demo of loading an icon and cursor resource includes define win32 lean and mean just say no to mfc include include all the win...