标签: closures

将闭包应用为类方法

假设有一个功能def f = { x -> x + 4 }.

有没有办法以某种方式称它为7.f()和得到11

groovy closures

0
推荐指数
1
解决办法
110
查看次数

Javascript闭包 - 变量的生命周期

作为一个相当新的Javascript和ac#背景我一直在磕磕绊绊.我很快就知道,我需要了解函数本身就是对象这一事实,而且JS闭包通常是导致混淆的原因.

我试图理解这段代码

// Function which returns object with function properties
function myFunc() {

    value = 42;

    var result = {
        value: value,
        getValue: getValue,
        incrementValue: incrementValue,
        setValue: setValue,
    };
    return result; 

    function setValue(y) {
        value = y;
    };

    function getValue() {
         return value;   
    }; 

    function incrementValue() {
        value++;
    };
};

// Helper function to print out results
function printResults(m,x){
    $('#output').append(m + ': ' + x).append('<br/>');
};

var myObject = myFunc();  // returns the object 
printResults('Inital call to getValue',myObject.getValue());

myObject.setValue(59);
printResults('Called …
Run Code Online (Sandbox Code Playgroud)

javascript closures

0
推荐指数
1
解决办法
861
查看次数

Javascript关闭,调用函数的方式不同

我可以这样调用这个闭包:

var increment = (function () {
  var test = 0;

  return function () {
    test++;
    console.log(test);

  }

})();
increment(); //1
increment(); //2
Run Code Online (Sandbox Code Playgroud)

但是,如何使用常规函数语法调用它?

function increment() {
   var test = 0;

   return function () {
     test++;
     console.log(test);
   }
}
increment()(); 1
increment()(); 1
Run Code Online (Sandbox Code Playgroud)

javascript closures

0
推荐指数
1
解决办法
189
查看次数

Javascript:如何将变量的值(不是引用)传递给函数?

这是我正在尝试运行的简化版本:

for ( winDoorNo = 0; winDoorNo < aWinDoorSetSpec.no_of_winDoors; winDoorNo ++ ) {
    (function (winDoorNo, self) {

        self.tangentVectors_azimuth = [];
        self.tangentVectors_polar   = [];

        self.tangentVectors_azimuth[winDoorNo] = tangentPlane.tangentVector_azimuth;
        self.tangentVectors_polar[winDoorNo]   = tangentPlane.tangentVector_polar;

    })(winDoorNo, this);
}
Run Code Online (Sandbox Code Playgroud)

但我发现self.tangentVectors_azimuth数组只包含for循环索引变量的最后一个值.我发现这篇文章描述了一个类似的问题,我实现了建议的解决方案,即使用闭包.然而,这对我不起作用.执行for循环后,值this.tangentVectors_azimuth仍为:

[undefined, undefined, Object { x=0.01999999996662183, y=0.01599999957331022, z=0, more...}]
Run Code Online (Sandbox Code Playgroud)

javascript closures pass-by-reference pass-by-value

0
推荐指数
1
解决办法
62
查看次数

后期绑定onclick事件

以下是我的javscript的一部分(使用jquery).

list = ['a', 'b', 'c'];
for(var i = 0 ; i< list.length ; i++) {
   $("<a>click here</a>").
      click(function(){
          foo(list[i]);
      }).
      appendTo('#sometag');
}
function foo(val) {
    console.log(val);
}
Run Code Online (Sandbox Code Playgroud)

无论您点击哪个标签,都会打印c.如何打印正确值???
它似乎正在使用i = 3的最后一个值,因此总是评估oc

javascript jquery closures

0
推荐指数
1
解决办法
1101
查看次数

javascript关闭的混乱

我已被证明我并不真正理解javascript封闭,我对以下代码感到困惑.我以为fxn会访问外部foo,但它实际上打印出"underfined".为什么??

var foo = "hello";
function fxn(){
   alert(foo);
   var foo = "test"
}

fxn();
Run Code Online (Sandbox Code Playgroud)

javascript closures

0
推荐指数
1
解决办法
110
查看次数

为什么这个javascript不断递归

我正在阅读javascript忍者列表5.6的秘密.在解释中,作者要求将变量移动到全局范围.然后,创建另一个id为box2的id,并在box1上的animate之后立即调用box2上的animate,以显示闭包为变量提供的保护.我理解这个概念,但我得到的结果是断言语句的无限递归.我不明白这一点.

为什么会这样?为什么它会进入无限递归循环?

代码如下.

谢谢!

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Listing 5.6</title>
  <script type="text/javascript" src="../scripts/assert.js"></script>
  <link href="../styles/assert.css" rel="stylesheet" type="text/css">
  <style type="text/css">
    #box { 
      position: absolute;
      border: 3px solid blue;
      width: 200px; height: 200px;
      background-color: #6495ed; 
      font-size: 2em; 
    }
  </style>
</head>
<body>
  <div id="box">????</div>                               <!--#1-->
  <div id="box2">????</div>                               <!--#1-->

  <script type="text/javascript">

    var elem;
    var tick;
    var timer;

    function animateIt(elementId) {

      elem = document.getElementById(elementId);              //#2
      tick = 0;                                               //#3

      timer = setInterval(function(){                         //#4
        if (tick < 100) {
          elem.style.left = elem.style.top = tick …
Run Code Online (Sandbox Code Playgroud)

javascript closures

0
推荐指数
1
解决办法
94
查看次数

单击jQuery元素生成

我使用jQuery生成按钮:

var button_a = $("<button />", {
                        text: 'A',
                        click: do_something,
                        class: "button a"
               });

var button_b = $("<button />", {
                        text: 'B',
                        click: do_something,
                        class: "button B"
               });

function do_something(){
    alert("Button Was pressed");
}
Run Code Online (Sandbox Code Playgroud)

我想这样做do_something而不是:

function do_something(name){
    alert("Button " + name + " was pressed");
}
Run Code Online (Sandbox Code Playgroud)

我应该如何改变jQuery的按钮创建,这样我可以在一传nameclick: do_something

是预先创建封闭的唯一解决方案吗?

javascript jquery closures click

0
推荐指数
1
解决办法
53
查看次数

这个关闭发生了什么?

function makeMultiplier(x){
        return function(y) {
            return x * y;
    }
}

var by10 = makeMultiplier(10);
console.log(by10(7));
Run Code Online (Sandbox Code Playgroud)

当make multiplier只接受一个参数时,如何传入两个参数?我不确定这种语法是如何工作的.

javascript closures

0
推荐指数
1
解决办法
71
查看次数

如果我们想在currying中保留一个值,javascript的闭包是如何工作的

我写了代码

// Handlers
function successHandlerFactory (savedFlag) {

  return function (res, savedFlag){
    if (res.data && res.status == 200) {
      ngcoupon_offerManager.addOffers(res.data.offers, -1, savedFlag);
      console.log('offers response', res, 'savedFlag', savedFlag);
    } else {
      console.error('something is wrong to get offers', res);
    }
  }
};

var offerSuccessHandler = function() {
    return successHandlerFactory();
}();
var savedofferSuccessHandler = function () {
  return successHandlerFactory(true);
}();
Run Code Online (Sandbox Code Playgroud)

但显然它给出了savedFlag undefined我所做的每一个任务.

为什么这不起作用

javascript closures

0
推荐指数
1
解决办法
46
查看次数