Javascript 变量、函数的声明
javascript變量
全局變量和局部變量
????按照變量的作用域來區分,和大多數編程語言類似,javascript變量也分為全局變量和局部變量。全局變量的作用域是整個js文件,而局部變量的作用域是該變量被定義的函數內部,也包括在該函數內部定義的函數的內部。其實無論是全局變量還是局部變量,他們都是在其被創建的環境(比如函數)中,以及被創建的環境所包含的子環境(比如函數內部的函數)中有效。
塊作用域
????變量的作用域是基于函數的,而不是基于塊的。在c++中,在花括號 { }中聲明的變量,在花括號外不可見,這就是塊作用域;而在javascript中,花括號內部聲明的局部變量,在花括號外仍可見。
?
變量和函數的聲明
????在javascript引擎解析javascript代碼的時候,首先javascript引擎會把變量和函數的聲明提前進行預解析,然后再去執行其他代碼。
變量的聲明
????變量的聲明只有一種方式,就是用var關鍵字聲明,直接賦值不是一種聲明方式!它僅僅是在全局對象上創建了新的屬性(而不是變量)。
????var num = 1; 是在當前域中聲明變量,如果在方法中聲明,則為局部變量;如果是在全局域中聲明,則為全局變量。
????而num=1; 是對屬性賦值的操作,首先,它會嘗試在當前作用域鏈中解析num,如果在當前作用域鏈中找到num,則會執行對num屬性賦值;如果沒有找到num,它會在上一層作用域鏈中找.... 直到找到最上層的作用域,即全局作用域,此時它會在全局作用域中創造num屬性并賦值。
????由于變量聲明自帶不可刪除屬性,比如var num=1 和 num = 1,前者是變量聲明,帶不可刪除屬性,因此無法被刪除;后者為全局變量的一個屬性,可以從全局變量中刪除。
聲明和賦值的區別
(1)聲明會在解釋器預解析js代碼的時候被提前,而賦值不會。
?
(2)直接賦值形式是在執行階段創建
alert(a); // undefined b = 10; alert(b); // 10, 代碼執行階段創建var a = 20; alert(a); // 20, 代碼執行階段修改?
(3)變量不能被刪除,屬性可以
a = 10; alert(window.a); // 10,是一個全局對象window的屬性 alert(delete a); // true alert(window.a); // undefined var b = 20; alert(window.b); // 20 alert(delete b); // false alert(window.b); // 仍然為 20,因為變量是不能夠刪除的。?
函數聲明
????函數聲明有三種方式:
(1)function name(){} 直接創建
?
(2)new Function 構建函數創建
var add=new Function("a", "b", "return a+b;"); add(4,5);?
(3)給變量賦值匿名函數方法創建
var add = function(a,b){return a+b; } add(4,5); ?其中,第二種和第三種方法,在聲明前訪問時,返回的都是一個undefined的變量。在聲明后訪問他們都是一個function的函數。
如果變量名和函數名聲明相同,函數優先聲明
?
總結
以上是生活随笔為你收集整理的Javascript 变量、函数的声明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js函数基础知识
- 下一篇: Bzoj4503 两个串