用this指向來判斷變數的作用域

2021-09-29 12:07:16 字數 361 閱讀 4732

題目:

var z=10;

function foo()

(function(funarg))(foo);

如果不清楚作用域鏈的形成,就會搞不清楚輸出結果是10還是20,這裡介紹一種用this指向去判斷變數所在的作用域,可以輕易的得到結果。

判斷this指向的一種情況是:this指向this所在函式的直接呼叫者

把上面的z換成this.z,再看題目,this所在函式foo的直接呼叫者是window。

用作用域鏈分析的話,函式foo在window上宣告,funarg()呼叫時會形成乙個函式作用域,該函式作用域裡面沒有變數z,並且該函式作用域不在那個自呼叫的函式的作用域裡面,所以只能到window上面去找。

JS 變數作用域的判斷

工作中有時候會遇到函式中的引數不知道屬於哪個,有兩種情況下容易弄混 1.函式帶引數,傳入的引數的 判斷 2.函式不帶引數,函式體內的引數的 判斷 特別注意 情況1 如果函式帶引數,則在呼叫該函式時,就可以知道該引數是來自 從呼叫時的執行上下文環境中判斷引數 如下 let x 100 let fn f...

指向變數的變數

在dos bat中,如何引用變數指向的變數?現在只發現了如下的形式 temp 例項1 echo off set processname robin hubin hb set a processno 0 setlocal enabledelayedexpansion for i in processn...

用迭代器指向型別宣告變數

在演算法中運用迭代器時很可能會用到相應型別,什麼是相應型別?迭代器所指之物便士其一。假設演算法中有必要宣告乙個變數,以 迭代器所指向的物件的型別 為型別,如何是好?畢竟c 只支援sizeof 並未支援typeof 即便運用rtti性質中的typeid 獲得的也只不過是型避惡名稱,不能拿來用作變數宣告...