我使用JS已经两年了,我的pluralsight访问将我评为精通JS,我了解原型继承、高阶函数、IIFE等,我在现实世界中使用过它们,但闭包是您理解的概念之一,但您无法找到在现实世界开发中使用它们的任何理由,我的意思是,如果我说,
function expClosure(val){
//do something to val-->anotherVal
return function(val){return anotherVal)};
}
var exp = expClosure(val);
exp(); --> returns the value of anotherV
我对js很陌生
我认为闭包是内部函数,是对外部函数中变量的访问。
但是在下面的代码中,如果单独的函数可以访问另一个单独的函数,它会形成闭包吗?
//separate function
function auth(name) {
return function (req, res, next) {
if (req.isAuthenticated() && name && req.user.name === name) next();
else if (req.isAuthenticated() && !n
当涉及函数闭包时,我很难理解垃圾收集是如何发生的。例如,下面的JS代码使用闭包实现一个加法器函数:
function adder() {
var sum = 0
return function(x) {
sum += x
return sum
}
}
function abc() {
var pos = adder()
for (i = 0; i < 10; i++) {
console.log(pos(i))
你能澄清我下面的误解吗?
如果JS中函数的执行上下文是在调用/调用函数时创建的,而不是在声明函数时创建的,那么在下面的代码中,内部是闭包吗?如果有,原因何在?inner还没有被调用,因为执行上下文是在调用时创建的,所以inner不可能存储对i的引用。
function foo(i) {
function inner() {
return i;
}
return inner;
}
var f = foo(3);
内部何时会引用foo的执行上下文?当它被调用时,还是在它被定义时?在上面的代码中,我还没有调用内部函数。
另外,如果您能解释一下JS在看到函数定义(与函数
我想检查字符串是否包含“a”、“e”、“i”、“o”或“u”中的任何一个字符。
据我所知,编写它的代码是:
let target : String = "monocle"
let ok : Bool = target.contains {"aeiou".contains($0)}
// more codes to use the Boolean value of variable 'ok'
有人能解释代码的第二行到底发生了什么,即变量ok的初始化吗?
编辑:更具体地说,我希望了解关闭过程中到底发生了什么。多亏了Sweeper__的回答,我现在明白
var x = 5;
function f0() {
return function () {
var y = 10;
var z = x + y;
console.log('x + y is: ' + z);
}
}
var myFunc = f0();
myFunc();
x = 10;
myFunc();
在上面的例子中,我也期望第二次打印x + y is: 15。因为,据我所知,从f0返回的是一个闭包。我认为闭包在定义其环境时会对其环境中的变量进行快照。因此,我认为用x更改x = 10;不会影响在闭包中使用的自由变量。
但很明显我
我对Javascript编程比较陌生。我正在编写一个示例,在从HTML调用对象的方法时遇到了困难。我怀疑这与方法的作用域或外部化有关,但我不确定。
index.html:
<script type="text/javascript">
var f = new Fred();
f.bar();
f.foo();
</script>
Fred.js:
function Fred() {
this.a = 1;
function foo() {
if (a == 1) {
a++;
}
var e = 0;
}
t
我有以下JS代码:
var Item = function ()
{
this.property = '';
this.myfunction = function ()
{
var value = this.property;
};
};
但是,this没有指向定义类,所以值不会得到任何东西。
如何从我的函数内部访问this.property?
这就是我认为在js中创建对象的最佳方式。
function obj(){
var x = "hi";
this.getX(){return x;}
}
var y = new obj()
console.log(y.x); //this returns undefined
但据我所知,在创建对象时更多地使用this.variable。
我在想,在java中,类中的东西应该是“私有的”(注意,我读过关于闭包的内容),这在js中适用吗?
什么被认为是创建对象的最佳方式?
对于节点应用程序,我使用了express和async.js。我的app.js中有以下代码:
var resultObject = {};
app.get('/average', function(req, res) {
async.series([
function(callback) {
//This does some complex computations and updates the resultObject
routes.avg(req.query.url, resultObject);
console.log('