[英]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.