關於作用域理解的一道題

2022-05-27 20:48:12 字數 1113 閱讀 8299

var num1 = 55

var num2 = 66

function

f1(num, num1)

f1(num1, num2)

console.log(num1)

console.log(num2)

console.log(num)

如題,問輸出的結果?

首先講一下執行順序:

js**執行分為兩個部分:

1.**的檢查裝載階段(預編譯階段),此階段進行變數和函式的宣告,但是不對變數進行賦值,變數的預設值為undefined。

2.當前作用域中不存在要訪問的變數時,則會到上一層的作用域中尋找,直到全域性作用域。

宣告完變數和函式之後,就執行f1(num1,num2)

函式的引數相當於函式內部隱式宣告變數:

function

f1(num, num1)

引數傳入之後就是將變數賦值:

function

f1(num, num1)

var num1 = 55

var num2 = 66

function

f1(num, num1)

然後看下面的輸出:

console.log(num1) 

console.log(num2)

console.log(num)

num1在全域性作用域中未被修改且賦值是55,num2被修改為100,num查詢作用域,未找到輸出則為報錯未定義:

console.log(num1) //

55 console.log(num2) //

100

console.log(num) //

undefiend

開啟我們最愛的谷歌,結果顯而易見了:

js作用域相關的一道題

今天有個夥伴問了我乙個題目,題目如下 var x 10 function fn function show f show fn 略作沉思,我的回答是20,小夥伴說是10 我昂,按照我的尿性我腦袋想的是四捨五入這段等於 var x 10 function show f show fn 但是其實不是這樣...

一道關於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為...

一道關於訊號的題

用fork建立兩個子程序,呼叫signal 讓父程序接收鍵盤上的中斷訊號 control c 捕捉到訊號後父程序用kill 向子程序傳送自定義訊號,子程序捕捉到訊號後分別輸出如下資訊後終止 child process 1 is killed by parent child process 2 is ...