相关疑难解决方法(0)

循环内的JavaScript闭包 - 简单实用的例子

var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
  // and store them in funcs
  funcs[i] = function() {
    // each should log its value.
    console.log("My value: " + i);
  };
}
for (var j = 0; j < 3; j++) {
  // and now let's run each one to see
  funcs[j]();
}
Run Code Online (Sandbox Code Playgroud)

它输出这个:

我的价值:3
我的价值:3
我的价值:3

而我希望它输出:

我的价值:0
我的价值:1
我的价值:2


使用事件侦听器导致运行函数的延迟时,会出现同样的问题:

var buttons = document.getElementsByTagName("button");
// let's create 3 …
Run Code Online (Sandbox Code Playgroud)

javascript closures loops

2689
推荐指数
25
解决办法
34万
查看次数

JavaScript中的变量范围是什么?

javascript中的变量范围是什么?它们的内部是否与函数外部相同?或者甚至重要吗?另外,如果变量是全局定义的,那么它们存储在哪里?

javascript variables scope var function

1952
推荐指数
18
解决办法
48万
查看次数

箭头函数与函数声明/表达式:它们是等效/可交换的吗?

规范问题如果在用箭头函数替换函数声明/表达式后发现有关问题的问题,请将其作为此副本的副本关闭.

ES2015中的箭头功能提供了更简洁的语法.我现在可以用箭头功能替换所有函数声明/表达式吗?我需要注意什么?

例子:

构造函数

function User(name) {
  this.name = name;
}

// vs

const User = name => {
  this.name = name;
};
Run Code Online (Sandbox Code Playgroud)

原型方法

User.prototype.getName = function() {
  return this.name;
};

// vs

User.prototype.getName = () => this.name;
Run Code Online (Sandbox Code Playgroud)

对象(文字)方法

const obj = {
  getName: function() {
    // ...
  }
};

// vs

const obj = {
  getName: () => {
    // ...
  }
};
Run Code Online (Sandbox Code Playgroud)

回调

setTimeout(function() {
  // ...
}, 500);

// vs

setTimeout(() => {
  // ...
}, …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 arrow-functions

449
推荐指数
2
解决办法
12万
查看次数

什么是'关闭'?

我问了一个关于Currying和关闭的问题.什么是关闭?它与currying有什么关系?

computer-science glossary functional-programming terminology

403
推荐指数
10
解决办法
12万
查看次数

Ng模型不更新控制器值

可能是愚蠢的问题,但我的html表单有简单的输入和按钮:

<input type="text" ng-model="searchText" />
<button ng-click="check()">Check!</button>
{{ searchText }}
Run Code Online (Sandbox Code Playgroud)

然后在控制器中(从routeProvider调用模板和控制器):

$scope.check = function () {
    console.log($scope.searchText);
}
Run Code Online (Sandbox Code Playgroud)

为什么我在单击按钮时看到视图更新正确但在控制台中未定义?

谢谢!

更新:似乎我已经解决了这个问题(之前不得不提出一些解决方法):只需要将我的属性名称更改searchTextsearch.text,然后$scope.search = {};在控制器中定义空对象并瞧...不知道为什么它正在工作虽然;]

javascript data-binding angularjs angular-ngmodel

267
推荐指数
9
解决办法
24万
查看次数

静态(词法)范围与动态范围(伪代码)

Program A()
{
    x, y, z: integer;

    procedure B()
    {
        y: integer;
        y=0;
        x=z+1;
        z=y+2;
    }

    procedure C()
    {
        z: integer;

        procedure D()
        {
            x: integer;
            x = z + 1;
            y = x + 1;
            call B();
        }

        z = 5;
        call D();
    }

    x = 10;
    y = 11;
    z = 12;
    call C();
    print x, y, z;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,使用静态作用域运行时该程序的结果是:x = 13,y = 7,z = 2.

但是,当使用动态范围运行时,结果为:x = 10,y = 7,z = 12.

这些结果是我们教授给我们的结果.但是,我无法理解他的生活如何达到这些结果.有人可能会通过伪代码并在两种不同类型的范围内解释它们的值吗?

scope pseudocode output

57
推荐指数
2
解决办法
4万
查看次数

如何在父窗口创建的iframe的onload处理程序中获取对iframe窗口对象的引用

在我粘贴任何代码之前,这是场景:

  1. 我有一个HTML文档,使用JavaScript创建一个空的iframe
  2. JavaScript创建一个函数并将对该函数的引用附加到iframe的文档对象(doc.open()用于获取对文档的引用)
  3. 然后将该函数作为onloadiframe文档的处理程序附加(通过写入<body onload="...">iframe.

现在让我难过的是onload处理程序中的全局(窗口)和文档对象(在它运行时)与通过脚本节点添加的JavaScript运行的相同对象不同.

这是HTML:

<!doctype html>
<html>
<head>
<script>
(function(){
  var dom,doc,where,iframe;

  iframe = document.createElement('iframe');
  iframe.src="javascript:false";

  where = document.getElementsByTagName('script')[0];
  where.parentNode.insertBefore(iframe, where);

  doc = iframe.contentWindow.document;

  var _doc = document;

  doc.open()._l=function() {
    // the window object should be the one that doc is inside
    window.vanishing_global=new Date().getTime();

    var js = this.createElement("script");
    js.src = 'test-vanishing-global.js?' + window.vanishing_global;

    window.name="foobar";
    this.foobar="foobar:" + Math.random();
    document.foobar="barfoo:" + Math.random();

    // `this` should be the document object, but it's not
    console.log("this …
Run Code Online (Sandbox Code Playgroud)

html javascript iframe dom

51
推荐指数
1
解决办法
9万
查看次数

Common Lisp中的动态和词法变量

我正在阅读Peter Seibel撰写的"Practical Common Lisp"一书.

在第6章"变量"部分"词汇变量和闭包"和"动态,又称特殊,变量". http://www.gigamonkeys.com/book/variables.html

我的问题是两个部分中的示例都显示了(让...)如何影响全局变量,并没有真正说明动态和词汇变量之间的区别.

我理解闭包是如何工作的,但我真的不知道在这个例子中让我们如此特别:

(defvar *x* 10)

(defun foo ()
  (format t "Before assignment~18tX: ~d~%" *x*)
  (setf *x* (+ 1 *x*))
  (format t "After assignment~18tX: ~d~%" *x*))


(defun bar ()
  (foo)
  (let ((*x* 20)) (foo))
  (foo))


CL-USER> (foo)
Before assignment X: 10
After assignment  X: 11
NIL


CL-USER> (bar)
Before assignment X: 11
After assignment  X: 12
Before assignment X: 20
After assignment  X: 21
Before assignment X: 12
After assignment  X: 13
NIL
Run Code Online (Sandbox Code Playgroud)

我觉得这里没什么特别的.外FOO …

lisp common-lisp lexical-scope

39
推荐指数
5
解决办法
1万
查看次数

如何构造javascript回调,以便正确维护函数范围

我正在使用XMLHttpRequest,我想在成功回调函数中访问本地变量.

这是代码:

function getFileContents(filePath, callbackFn) {  
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            callbackFn(xhr.responseText);
        }
    }
    xhr.open("GET", chrome.extension.getURL(filePath), true);
    xhr.send();
}
Run Code Online (Sandbox Code Playgroud)

我想这样称呼它:

var test = "lol";

getFileContents("hello.js", function(data) {
    alert(test);
});
Run Code Online (Sandbox Code Playgroud)

这里test将超出回调函数的范围,因为只有封闭函数的变量可以在回调函数中访问.传递test给回调函数的最佳方法是什么,以便正确alert(test);显示test

编辑:

现在,如果我有以下代码调用上面定义的函数:

for (var test in testers) {
    getFileContents("hello.js", function(data) {
        alert(test);
    });
}
Run Code Online (Sandbox Code Playgroud)

alert(test);代码只打印的最后一个值testfor环.如何使它打印出调用test函数时的值getFileContents?(我想这样做而不改变,getFileContents因为它是一个非常通用的辅助函数,我不想通过传递一个特定的变量test来使它具体化.

javascript scope function callback

33
推荐指数
2
解决办法
4万
查看次数

如何在javascript中生成数字/字符序列?

有没有办法在javascript中生成字符或数字序列?

例如,我想创建包含8个1的数组.我可以用for循环来做,但想知道是否有一个jQuery库或javascript函数可以为我做?

javascript jquery

32
推荐指数
9
解决办法
5万
查看次数