var a=100;function a()
a();// a is not a function
原來函式宣告會置頂
變數宣告也會置頂
函式宣告比變數宣告更置頂(牢記:函式是一等公民)
變數和複製語句一起書寫,在js引擎解析時,會將其拆成宣告和賦值兩個部分,宣告置頂,賦值保留在原來的位置
宣告或的變數不會重複宣告
實際上這段**等同於
var a; //函式宣告var a; //變數宣告(實際上這裡不會重複宣告了)
a = function(); //函式賦值
a = 100;//變數賦值(給a重新賦值了)
a()//a is not a function
而如果**會如下寫法則a方法會執行
var a; //函式宣告var a; //變數宣告(實際上這裡不會重複宣告了)
a = 100;
a=function()//函式賦值
a()//123
一道有意思的題目
function foo() ; //執行這個函式重新賦值了 getnamereturn this;
}foo.getname = function () ;
foo.prototype.getname = function () ;
var getname = function () ;
function getname()
//請寫出以下輸出結果:
foo.getname(); // 3
getname(); // 4
foo().getname(); // 1
getname(); // 1
new foo.getname(); // 2
new foo().getname(); // 3
new new foo().getname(); // 3
JS中變數名和函式名重名
var x 12 var x 13 function x console.log x 13 err x is not a function x 這個串 執行完會報錯 a is not a function 問題來了,為什麼會報這個錯誤呢?這裡涉及到函式和變數的預解析 1 函式宣告會置頂 2 變數宣告...
JS中變數名和函式名重名
var x 12 var x 13 function x console.log x 13 err x is not a function x 這個串 執行完會報錯 a is not a function 問題來了,為什麼會報這個錯誤呢?這裡涉及到函式和變數的預解析 1 函式宣告會置頂 2 變數宣告...
JS 函式名和變數名重名
繼續作用域的問題,今天上午看了一會,下午看又看到了乙個型別的題,函式名和變數名相同的問題。之前還不會覺得函式名和變數名重名了會有什麼衝突。也是沒有去測試過。懶了。直接貼 出乎意料的報錯了,有點一頭霧水的感覺。但是一步一步的去分析的話,還是可以明白為什麼會是這個答案。首先這道題需要和js的預編譯階段掛...