js作用域相關的一道題

2022-07-25 20:33:12 字數 676 閱讀 3952

今天有個夥伴問了我乙個題目,題目如下:

var x = 10;

function fn()

function show(f) )()

}show(fn);

略作沉思,我的回答是20,小夥伴說是10 ,我昂,按照我的尿性我腦袋想的是四捨五入這段等於

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