簡體   English   中英

javascript中的范圍以訪問私有變量

[英]Scope in javascript to access a private variable

a = function (){
    var b = 10;
    var k = function(){
        console.log(b);
    }();
}();

上面的代碼將打印10。

var k = function(){
    console.log(b);
}
var a = function (){
    var b = 10;
    k();
}();

此代碼將打印 undefined

可以打印10嗎? 就像在調用它之前將范圍綁定到k一樣。

正如@Derek回答的那樣,您顯然可以傳遞參數。

除此之外,您不能轉移或更改變量范圍,但可以直接操縱調用上下文。

這樣,您可以將b設置為對象的屬性,並將該對象設置為所調用函數的調用上下文。

var k = function(){
    console.log(this.b);
}
var a = function (){
    var obj = {b:10};
    k.call(obj);
}();

.call()方法調用k函數,但是將您提供的第一個參數設置為被調用函數的調用上下文。

實際上,從技術上講,您不需要使用對象。 您可以直接將數字設置為要使用的值...

var k = function(){
    console.log(this);
}
var a = function (){
    var b = 10;
    k.call(b);
}();

在嚴格模式下,您將獲得數字,但在非嚴格模式下,您將獲得數字作為其對象包裝。

真? 你嘗試了什么?

var k = function(b){
    console.log(b);
}
var a = function (){
    var b = 10;
    k(b);  //Done.
}();

為什么在第二個示例中undefined它是因為b未定義。 您必須先定義它,然后才能使用變量b

var k = function(b){ //<--There, defined. Mission accomplished.

可以通過eval授予對范圍的訪問權限。

var a = (function() {
    var b = 10;
    return {
        eval: function(s) {
            return eval(s);
        }
    };
})();

var k = function() {
    console.log(a.eval("b"));
};

k();
​

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM