相关疑难解决方法(0)

为什么每次调用函数时都不会重置变量

我正在阅读弗里斯比教授的大部分功能编程指南,我遇到了如下所示的代码示例.我不明白为什么每次调用squareNumber时缓存都不会重置为{}.

var memoize = function(f){
    var cache = {}; // why is this not reset each time squareNumber is called?

    return function() {
        var arg_str = JSON.stringify(arguments);
        cache[arg_str] = cache[arg_str]|| f.apply(f, arguments);
        return cache[arg_str];
    };
}

var squareNumber = memoize(function(x){ return x*x; });
squareNumber(4);
//=> 16
squareNumber(4); // returns cache for input 4
//=> 16
squareNumber(5);
//=> 25
squareNumber(5); // returns cache for input 5
//=> 25
Run Code Online (Sandbox Code Playgroud)

我的一个理论是,由于memoize是一个全局变量,因此每次调用缓存变量时都不会重置缓存变量.但我似乎无法找到一个好的解决方案.

javascript functional-programming

2
推荐指数
1
解决办法
983
查看次数

在javascript中访问“私有”变量

假设我有以下课程:

function MyClass(){

    this.public = function(){
        console.log(private);
    };

    var private = 10;
}


var test = new MyClass;

test.public(); // logs 10
test.private; // undefined
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以从外部访问私有变量。查看 chrome 的控制台似乎是可能的,因为它显示了它的上下文:

在此处输入图片说明

编辑:只是为了澄清:我知道如何正确公开它。只是想确定是否没有一些hacky方式来访问它。

javascript

2
推荐指数
1
解决办法
2690
查看次数

Javascript模块中的变量在它外面可见?

首先,我来自.NET世界,其中有静态类(C#,也称为VB中的模块)和实例类 - 可以实例化的类.

这个问题是关于Javascript的,我正在尝试重新创建我已经知道的模式并创建一个模块/静态类.这是代码:

var MyModule = {
    variable1: 0,
    variable2: 1,
    method1: function() {
        //code goes here
    },
    method2: function() {
        //mode code goes here
    },
    method3: function() {
        //and some more just to prove the pattern        
    }
}

method1(); //error - no such method - ok, good, I expect that
variable1 = 5; //silently assigns a variable inside MyModule to 5 ?
Run Code Online (Sandbox Code Playgroud)

请解释为什么在命名空间内声明的方法不可见,但变量是什么?此外,有没有办法防止这些变量在外部可见MyModule,即使在同一个脚本中?

javascript scope module global-variables static-classes

2
推荐指数
1
解决办法
4471
查看次数

for循环在Ajax调用中重复返回相同的值

我正在尝试使用for循环遍历一系列URL并将它们用于ajax调用.在ajax调用之外,i正确地更改值,但是当我尝试从调用内部访问它时,它总是返回2.它正确循环但具有相同的值而不是循环0, 1等.

var i = 0;
for(i = 0; i <= 1; ++i) {
    console.log("Value outside of call = " + i);
    $.ajax({
        url : urls[i],
        dataType : 'jsonp',
        timeout : 3000,
        count : 0,
        success : function(data) {
            console.log("Value inside of call = " + i);
            shotInfo[i] = data;
        },
        error : function() {
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

我也试过使用while循环,但它具有相同的效果.

javascript variables jquery for-loop

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

无法在Javascript中更改上下文?

我在这里打破了我的头脑.我有这个简单的代码:

function myFunc()
{
    this.a = "aaa";

    return {
        h: function ()
        {
                   alert(this.a);
        }
    }
}



var f = new myFunc();
console.log(f.h.apply(f)) //I'm expecting to see here : "aaa" but it says "undefined"
Run Code Online (Sandbox Code Playgroud)

f.h看起来完全像这样:

 function ()
 {
      alert(this.a);
     } 
Run Code Online (Sandbox Code Playgroud)

所以,我正在尝试将上下文设置为f自身(包含aprop)apply.

但它不起作用.

我错过了什么?

ps还有其他选择.我知道.但为什么我的具体代码不起作用?

javascript

1
推荐指数
2
解决办法
85
查看次数

想要将变量传递给node async的map方法

我正在使用节点异步,我想将变量传递给它在第二个参数中使用的方法...例如:

  async.map(submissions, addScore, function(err, submissions) {
    if (submissions) {
      return submissions;
    }
  });
Run Code Online (Sandbox Code Playgroud)

我想通过userId沿addScore,但我不知道如何做到这一点.

addScore是我的方法,我呼吁每次提交,它需要一个userId.

javascript asynchronous function node.js

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

匿名函数和参数

function foo() {
    var bar = 'no'
    setInterval(function() { console.log(bar); }, 1000);
}
Run Code Online (Sandbox Code Playgroud)

当我执行这段代码时,我得到以下输出:no,所以输出是正确的.但是当我执行下一段代码时,当我将函数bar作为参数传递给该匿名函数时,我不知道为什么输出是undefined

function foo() {
    var bar = 'no'
    setInterval(function(bar) { console.log(bar); }, 1000);
}
Run Code Online (Sandbox Code Playgroud)

如果我将变量作为参数传递,为什么未定义?如果bar在匿名函数中也有一个变量调用,我知道该变量将被内部函数值重写,但我无法理解这种行为

javascript performance

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

如何在不声明JS中的全局变量的情况下将值从一个函数传递给另一个函数?

我只想将new1和new new2函数的值传递给new3函数

function new1(){
  var a = 5;
}

function new2(){
  var c=6;
}

function new3(){
  if(a<c){
    dosomething();
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript

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

如何正确存储变量而不在全局存储它们?

假设我声明了fooready函数中调用的变量.通常,当函数结束时,会删除本地声明的变量吗?

我想在事件监听器中使用这个变量#someid.我试过这个,foo当发生点击事件时,仍然可以访问该变量#someid.

当ready函数结束时,为什么这个变量不会被破坏并且仍然可以访问?声明变量并以这种方式使用它是否安全?我不想全局声明变量,因为我没有.

编辑:这些事件监听器及其变量存储在哪里?

这是我的js:

$(document).ready(function() {
var foo = 0;

//random event listener
$('#someId').on('click', function() { foo++; }); //increment foo

});
Run Code Online (Sandbox Code Playgroud)

javascript jquery

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

javascript中自调用函数内变量的生命周期是多少

我一直在努力理解以下代码:

var add = (function () {
        var counter = 0;
        return function () {return counter += 1;}
    })();
    add();
    add();
    add();
Run Code Online (Sandbox Code Playgroud)

这里add分配了匿名自调用函数的返回值 - 即函数function() { return counter += 1 }.现在第一次add()被调用它1按预期返回.但第二次add()称它返回2.

我的问题是因为counter在函数内定义所以不是每次函数完成执行counter都应该死掉?也就是说,在第一次调用add()1之后将显示.现在我们已经不在那个函数中,所以不应该counter忘记它以前的值并且像automatic变量一样从堆栈中销毁?

javascript variables lifetime

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