js面試題, 函式提公升, 變數提公升,綜合測試

2021-10-04 11:38:30 字數 1051 閱讀 4864

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...