第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取范圍內的所有變量

獲取范圍內的所有變量

狐的傳說 2019-07-05 14:31:52
獲取范圍內的所有變量是否有方法獲取javascript中當前范圍內的所有變量?
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

沒有。“in作用域”變量由“作用域鏈”決定,該鏈無法以編程方式訪問。

要了解詳細信息(相當多),請查看ECMAScript(JavaScript)規(guī)范。這里有一個鏈接下載規(guī)范(PDF)的官方頁面,以及這里有一個到官方的,可鏈接的HTML版本。

根據您對Camsoft的評論進行更新

變量范圍內因為事件函數(shù)是由定義事件函數(shù)的位置決定的,而不是由它們如何調用它決定的。,您可以通過this并通過按照KennyTM所指出的思路做一些事情來論證(for (var propName in ____)),因為這將告訴您在提供給您的各種對象上有什么可用的(this和論點;如果你不確定他們給了你什么論據,你可以通過arguments為每個函數(shù)隱式定義的變量)。

因此,除了定義函數(shù)的位置之外,您還可以通過以下其他方法找到其他可用的方法:

var n, arg, name;alert("typeof this = " + typeof this);for (name in this) {
    alert("this[" + name + "]=" + this[name]);}for (n = 0; n < arguments.length; ++n) {
    arg = arguments[n];
    alert("typeof arguments[" + n + "] = " + typeof arg);
    for (name in arg) {
        alert("arguments[" + n + "][" + name + "]=" + arg[name]);
    }}

(您可以對此進行擴展,以獲得更多有用的信息。)

相反,我可能會使用像Chrome的dev工具這樣的調試器(即使您通常不使用Chrome進行開發(fā))或火蟲(即使你通常不使用Firefox進行開發(fā)),或者Opera上的蜻蜓,或者IE上的“F12開發(fā)者工具”。并閱讀他們提供給您的任何JavaScript文件。把他們打倒在頭上找合適的醫(yī)生。*-)


查看完整回答
反對 回復 2019-07-05
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

雖然每個人都會回答“我知道“不”是正確的答案,但如果你真的需要局部變量對于一個函數(shù),有一種受限的方式。

考慮這一職能:

var f = function() {
    var x = 0;
    console.log(x);};

可以將函數(shù)轉換為字符串:

var s = f + '';

您將獲得作為字符串的函數(shù)源。

'function () {\nvar x = 0;\nconsole.log(x);\n}'

現(xiàn)在,您可以使用如下所示的解析器埃斯普里馬解析函數(shù)代碼并查找局部變量聲明。

var s = 'function () {\nvar x = 0;\nconsole.log(x);\n}';s = s.slice(12); 
// to remove "function () "var esprima = require('esprima');var result = esprima.parse(s);

并查找具有以下內容的對象:

obj.type == "VariableDeclaration"

結果(我刪除了console.log(x)(見下文):

{
    "type": "Program",
    "body": [
        {
            "type": "VariableDeclaration",
            "declarations": [
                {
                    "type": "VariableDeclarator",
                    "id": {
                        "type": "Identifier",
                        "name": "x"
                    },
                    "init": {
                        "type": "Literal",
                        "value": 0,
                        "raw": "0"
                    }
                }
            ],
            "kind": "var"
        }
    ]}

我已經在Chrome,F(xiàn)irefox和Node上測試過這一點。

問題使用此方法,您只需在函數(shù)本身中定義變量。例如,對于這個例子:

var g = function() {
    var y = 0;
    var f = function() {
        var x = 0;
        console.log(x);
    };}

您只需訪問x而不是y..但你還是可以用打電話者(arguments.callee.caller.caller)在循環(huán)中查找調用函數(shù)的局部變量。如果您有所有局部變量名,那么作用域變量..使用變量名,您可以使用簡單的val訪問值。


查看完整回答
反對 回復 2019-07-05
  • 3 回答
  • 0 關注
  • 535 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號