2016-11-07 193 views
0

是否有可能以其他方式執行以下操作,而不傳遞參數?將變量傳遞給函數範圍

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

var original = f; 

f = function(){ 
    var v = "test"; 
    original(); 
}; 

// the following line is called by 3rd party code 
f(); // it errors out here - v is not defined 
+0

_without passing parameters_,Global。使'v'成爲一個全局變量。 – Tushar

回答

1

var v爲globel變量

var v ; 
 
var f = function(){ 
 
    v="new test" 
 
    console.log(v); 
 
} 
 

 
var original = f; 
 

 
f = function(){ 
 
    v = "test"; 
 
    original(); 
 
}; 
 

 
f();//f function 
 
original();//original function also working

+0

JS引擎理論上可以在'v =「test」;'和'original();'之間中斷執行,並用另一個值替換'v'? –

+0

@MaximBalaganskiy Ya..'var v'是globel變量,因此可以很容易替換該值 – prasanth

+0

@MaximBalaganskiy查看更新後的答案。'v'用'original'函數調用中的另一個值替換 – prasanth

0

使用可以使用JavaScript閉包這裏

function f() { 
    var v = 'test'; 
    return (function() { 
     console.log(v) 
    })(); 
} 
0

另一種方法在這裏:

var f = function(){ 
    console.log(arguments[0]); 
}; 

f = f.bind(null, 'test'); 

f();