var a=100;
function a(){
console.log(a);
}
a();// a is not a function
原來
- 函式宣告會置頂
- 變數宣告也會置頂
- 函式宣告比變數宣告更置頂
- 變數和復制陳述句一起書寫,在js引擎決議時,會將其拆成宣告和賦值兩個部分,宣告置頂,賦值保留在原來的位置
- 宣告或的變數不會重復宣告
實際上這段代碼等同于
var a; //函式宣告
var a; //變數宣告(實際上這里不會重復宣告了)
a = function(){ console.log(a); }; //函式賦值
a = 100;//變數賦值(給a重新賦值了)
a()//a is not a function
而如果代碼會如下寫法則a方法會執行
var a; //函式宣告
var a; //變數宣告(實際上這里不會重復宣告了)
a = 100;
a=function(){console.log(123)}//函式賦值
a()//123
一道有意思的題目
function Foo() {
getName = function () { alert (1); }; //運行這個函式重新賦值了 getName
return this;
}
Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
var getName = function () { alert (4);};
function getName() { alert (5);}
//請寫出以下輸出結果:
Foo.getName(); // 3
getName(); // 4
Foo().getName(); // 1
getName(); // 1
new Foo.getName(); // 2
new Foo().getName(); // 3
new new Foo().getName(); // 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/168613.html
標籤:JavaScript
上一篇:for回圈的更多寫法
