js闭包,从全局上下文中获取函数参数

时间:2017-11-30 20:14:07

标签: javascript closures

如果我有一个类似下面代码的闭包,我怎么能得到' a'关闭之外的参数。 JS引擎使用范围链来找到' a'当我打电话给关闭时,但是有机会获得“关闭”。来自全球背景的价值?

function fn(a){
    return function f(b){
        console.log(a + " " + b);
    }
}

BR,Igor

2 个答案:

答案 0 :(得分:1)

一些技巧是将它分配给函数对象:

function fn(a){
  function f(b){
    console.log(a + " " + b);
  }
  f.a = a;
  return f;
}

所以你可以这样做:

const result = fn(2);
console.log(result.a, result(2));

然而,闭包是为了封装东西。如果您不想这样,则不应使用闭包。

答案 1 :(得分:0)

var count=0;
function add(){
return count+=1;
}
function sub(){
return count-=1;
}
function increment(){
document.getElementById("element").innerHTML=add();
}
function decrement(){
document.getElementById("element").innerHTML=sub();
}
<button type="button" onclick="increment()">Increment!!</button>
<button type="button" onclick="decrement()">Decrement!!</button><br><br><br>
<div id="element"><div>