作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了很多关于闭包的文章,并且我经常使用它们,但是我发现了一个我不理解的案例。为什么我要传递给测试的函数无法访问 hello 变量?它不应该在查看范围更改时找到它吗?我的代码:
(function($){
var hello="hello world"
$.test=function(a){
alert(hello+" 1")
a()}
})(this)
test(function(){alert(hello+" 2")})
最佳答案
JavaScript 使用 lexical scope (帽子小费 deceze)。作用域由函数的定义位置决定,而不是由函数的传递位置或调用位置决定。
如果您希望一个函数能够从它被传递到的范围访问变量中的数据,您需要定义它以便它接受一个参数,然后您需要传递数据。
"use strict";
(function($) {
var hello = "hello world"
$.test = function(a) {
alert(hello + " 1")
a(hello);
}
})(this);
test(function(passed_data) {
alert(passed_data + " 2")
});
这是一种常见的设计模式。参见 the Promise API例如:
myFirstPromise.then((successMessage) => {
// successMessage is whatever we passed in the resolve(...) function above.
// It doesn't have to be a string, but if it is only a succeed message, it probably will be.
console.log("Yay! " + successMessage);
});
请注意传递给 then()
的函数如何采用一个参数来提供它将要处理的数据。
关于javascript - 将新函数带入闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45351053/
我是 cocos2d-x 的新手。上网冲浪并没有多大帮助。 我的问题: 我们需要开发一个应用程序,它有更多的控件,如日历、表格、选项以及很少的动画内容。 cocos2d-x 给我留下了深刻的印象。但我
好吧,在我第一次接触类似 AJAX 的行为时...... 我想根据用户点击链接加载带有 pdf 的 div。如果用户点击第二个链接,div 应该被新的 pdf 覆盖。 所以我想用类似的东西来测试它:
如何在 RichTextBox 中聚焦 Inline? 我从文本文件创建一个 FlowDocument 并将其加载到我的 richTextBox1并根据 Button_click 在另一个之后标记一个
我是一名优秀的程序员,十分优秀!