今天有個夥伴問了我乙個題目,題目如下:
var x = 10;略作沉思,我的回答是20,小夥伴說是10 ,我昂,按照我的尿性我腦袋想的是四捨五入這段等於function fn()
function show(f) )()
}show(fn);
var x = 10;但是其實不是這樣的,於是我在想是不是因為匿名執行函式的作用域指向全域性的原因呢?function show(f)
show(fn);
但又不是
其實是因為,每個函式都有自己獨立的執行環境,在**完成的時候,就確定了自己的作用域,雖然這裡的f被當作乙個形參傳遞進了show中,但是人家f也是有風格的好嗎,它還是得按自己得風格做事,也就是說,此處的f定義的時候是乙個全域性函式,那麼它的作用域還是全域性的,所以的話,這裡的f會去找全域性的x 也就是10,
那麼如果我們的全域性沒有定義x變數會怎麼樣呢
找不到全域性x變數報錯了
參考:
關於作用域理解的一道題
var num1 55 var num2 66 function f1 num,num1 f1 num1,num2 console.log num1 console.log num2 console.log num 如題,問輸出的結果?首先講一下執行順序 js 執行分為兩個部分 1.的檢查裝載階段 ...
一道關於JS作用域的面試題
1 var x 1 2var obj 11 說出下面的輸出結果 obj.dbl 解析 this.x指向當前物件,所以this.x 2等同於obj.x 2 而x 2,在當前作用域中沒有找到宣告,則在全域性作用域下查詢是否有x,x 2等同於window.x 2 日誌列印輸出2 4,此時window.x為...
js作用域相關筆記
1.js引擎 編譯器 作用域。引擎 負責js全過程的編譯和執行 編譯器 負責語法分析和 生成 作用域 負責收集並維護宣告組成的查詢,以及當前執行 對這些變數的訪問許可權 簡言之,作用域就是用於編譯和執行的一套規則 三者的關係 編輯器要編譯的時候會詢問作用域,引擎要執行 的時候也會詢問作用域。2.lh...