function
foo(
)return
this;}
foo.
getname
=function()
;foo.prototype.
getname
=function()
;var
getname
=function()
;function
getname()
// foo.
getname()
;// 2
getname()
;// 4
foo().
getname()
;// 1 // (foo()).getname() ---> window.getname()
getname()
;// 1 // 執行foo(), 被修改
newfoo.getname()
;// 2 // '.'點的執行優先順序最高, 但'.'前遇見()會先執行()前面
//new (foo.getname)()
newfoo()
.getname()
;// 3 (new foo()).getname();
// 例項物件的隱式原型 = 建構函式的顯示原型
newnew
foo().
getname()
;// 3 new ((new foo()).getname)()
函式提公升, 變數提公升foo 函式提公升, var 變數(getname)提公升, getname 函式提公升;
變數名和函式名衝突, 會忽略變數, 保留函式;
函式作用域foo 函式裡先從自身找 getname 的變數, 沒有, 就找全域性的
執行 foo 函式, 會修改全域性的 getname
函式返回值foo 函式返回值為 this , 即為 呼叫foo 函式的物件
理解不全面, 還望指正. JS函式提公升和變數提公升
js引擎在執行整個js 的過程中,分為倆步。第一步是讀取和解析js 第二部是執行。在引擎解析js 的時候,當解析器遇見變數宣告 var 變數名 和函式宣告 function 函式名 的時候,會將這些宣告提到各自作用域的最前面。在es6之前,js是沒有塊級作用域的。只有2種作用域 注 在其他語言中,被...
JS 變數提公升與函式提公升
在 es6 出來之前,沒有塊級作用域,只有全域性作用域 和 函式作用域。變數提公升指的是 將變數宣告提公升到它所在作用域的最開始部分。例子 console.log foo undefined var foo 變數提公升 console.log foo 變數提公升 相當於 var foo consol...
js 變數 函式提公升
js 變數 函式提公升 先簡單理解下作用域的概念,方便對變數與函式提公升的概念的理解 function foo console.log x foo 2結果為2,可見js中並沒有塊級作用域的概念 可以使用下面的方法創造自己的作用域,這樣不會干擾到外部變數 function foo console.lo...