相关疑难解决方法(0)

什么是'关闭'?

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

computer-science glossary functional-programming terminology

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

为什么在javascript匿名函数的末尾写".call(this)"?

我看过这样写的JavaScript(它是在演示中,我手头没有实际的代码,但暗示这是正常的):

(function() {    

    var a = 1;

    this.sayA = function() {
        alert(a);
    }

}).call(this);

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

我想它是一个匿名函数,因此变量a不是全局可用的.

有什么意义.call(this)呢?由于这个函数没有嵌套,this只是窗口.它与()最后的写作有何不同?

javascript

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

为什么要使用javascript函数包装器(在coffeescript中添加)".call(this)"

当我使用最新的(1.0)咖啡脚本时,一个简单的javascript输出看起来像这样(默认情况下):

(function() {
  var a;
  a = 1;
}).call(this);
Run Code Online (Sandbox Code Playgroud)

是什么.CALL(本)做,哪些是添加它的原因是什么?

javascript coffeescript

31
推荐指数
2
解决办法
6228
查看次数

CoffeeScript模块的模式

在Github上查看CoffeeScript源代码时,我注意到大多数(如果不是全部)模块定义如下:

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

这种模式看起来像是将整个模块包装在匿名函数中并调用自身.

这种方法的优点和缺点是什么?还有其他方法可以实现相同的目标吗?

javascript node.js coffeescript

29
推荐指数
2
解决办法
9662
查看次数

为什么要使用(function(){}).call(this);?

我最近一直在研究一些JS库,这些库是由真正了解他们正在做什么的人编写的,我一直看到这种模式,而且我找不到有关它的信息.我阅读了.call()方法的文档,但它对我来说并没有多大意义.我希望通过实例获得其中一个经典的深入SO解释.

(function(undefined){
   /*(insert entire library here)*/
}).call(this);
Run Code Online (Sandbox Code Playgroud)

这是关于什么的?为什么这是编写库的好方法?

请注意,有时undefined会省略,但我不知道将它放在那里有什么不同.我甚至不知道论据的来源,或者来电者是谁.

javascript

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

用coffeescript公开一个javascript api

我最近开始使用coffeescript,很好奇将我用Coffeescript创建的对象暴露给其他javascript页面的"正确"方法是什么.由于coffeescripts包装功能,是否可以接受调用行为window.coffeeObject = externalObject.

example.coffee

externalObject = 
   method1: -> 'Return value'
   method2: -> 'Return method2'

window.myApi = externalObject
Run Code Online (Sandbox Code Playgroud)

example.js - 从example.coffee编译

(function() {
  var externalObject;
  externalObject = {
    method1: function() {
      return 'Return value';
    },
    method2: function() {
      return 'Return method2';
    }
  };
  window.myApi = externalObject;
}).call(this);
Run Code Online (Sandbox Code Playgroud)

other.js

alert(myApi.method1()) // Should return "Return value"
Run Code Online (Sandbox Code Playgroud)

javascript coffeescript

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

用(function(){...})包装文件.调用(this)与简单调用()

backbone.js源代码使用这样的函数包装器:

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

http://backbonejs.org/docs/backbone.html#section-185所示.

更常见的是,我已经看到使用以下内容:

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

这两者的行为何时不同?我的印象是他们是等价的,但我认为必须有一个区别,因为Backbone使用.call(this)而不是更短的选择.

javascript

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

为什么.call(this)使用而不是括号

有什么特别的原因我经常遇到:

(function() {
  console.log("Hello");
}).call(this);
Run Code Online (Sandbox Code Playgroud)

代替:

(function() {
  console.log("Hello");
})();
Run Code Online (Sandbox Code Playgroud)

传递this给对方时应该有同样的效果吗?

似乎有一些性能差异:http://jsperf.com/call-vs-parenthesis.

javascript

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