相关疑难解决方法(0)


这个符号在JavaScript中意味着什么?

这是什么?

这是一系列关于JavaScript中语法的问题.这也是社区Wiki,因此邀请每个人参与维护此列表.

为什么是这样?

Stack Overflow不允许搜索特定字符.因此,在搜索运算符和其他语法标记时,很难找到许多关于运算符和其他语法标记的问题.这也使得关闭重复更加困难.以下列表是为了解决此问题.

主要思想是在Stack Overflow上链接现有问题,因此我们更容易引用它们,而不是复制ECMAScript规范中的内容.

此外,这是PHP符号引用的公然副本.我们需要一个JS.


请帮忙.编辑并添加指向其他运算符/语法参考的链接,或者如果您无法在特定语法上找到好的问题/答案,请添加此问题的答案并将其链接

javascript

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

!javascript中的前一个函数?

可能重复:
感叹号在功能之前做了什么?

我今天第一次看到了这样的格式化的函数:

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

前面的感叹号是什么?我认为它的功能与:

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

但是......这里发生了什么?

javascript

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

IIFE中使用void与包装的区别void function()vs(function())

创建模块的常见做法是将它们包装在parens中,这样就不会泄漏模块外的任何变量(连接时等).

还有voidoperator,它计算给定的表达式并返回undefined.(见MDN)

我想知道在parens中使用包装函数而不是使用包装函数的原因是什么void.它是历史的,是否与连接有关?

我知道,当其中一个文件缺少分号时,你可能会遇到连接问题,直到你注意到它为止会导致令人讨厌的问题.

例子

说,module1.js(注意缺少的逗号):

(function () {
    return function () {
        console.log('module1. I should not be called');
    };
})()
Run Code Online (Sandbox Code Playgroud)

和,module2.js:

(function () {
    return function () {
        console.log('module2. I should not be called either');
    };
})();
Run Code Online (Sandbox Code Playgroud)

如果将这些脚本连成一个包,它将产生以下结果:

(function () {
    return function () {
        console.log('module1. I should not be called');
    };
})()(function () {
    return function () {
        console.log('module2. I should not be called either');
    };
})();
Run Code Online (Sandbox Code Playgroud)

由于两个模块(文件)都返回一个函数,所以第二个假定的IIFE成为第一个模块的 …

javascript iife

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

如何创建一个可以和requirejs一起使用的js函数

我创建了一个js库(MessageBus.js)并使其与requirejs兼容.现在我想使用不带requirejs的同一个lib,即创建对象(新的MessageBus()).

我正在用这篇文章附上我的lib.

define([], function () {

var MessageBus = function () {
    this.channelCallBackMap = {};
    this.alreadyRegistred = false;
}

MessageBus.prototype = {
    publish: function (channel, message) {
        //Put original message and channel in the envelope and send it
        var envelope = {
            channel: channel,
            message: message
        };
        var domain = location.protocol + '//' + location.host;
        //Send message to all sibling iframes in the parent document
        $("iframe", parent.document.body).each(function (i, frame) {
            frame.contentWindow.postMessage(JSON.stringify(envelope), domain);
        });


    },

    subscribe: function (channels, callbacks) {
        var …
Run Code Online (Sandbox Code Playgroud)

javascript jquery requirejs

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

JavaScript Bang"!" 功能与领先的半结肠";" IIFEs

Airbnd建议我这样做:

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

因为:

这可确保如果格式错误的模块忘记包含最终分号,则在脚本连接时,生产中不会出现错误.

爆炸让我可以解决语言的语法规则:

// Evaluated in Chromium 34 console.
function(){}(); // => SyntaxError: Unexpected token (
!function(){}(); // => true
Run Code Online (Sandbox Code Playgroud)

当连接其他模块时,爆炸似乎可以解决问题:

!function(){}();function(){}(); // => SyntaxError: Unexpected token (
!function(){}();!function(){}(); // => true
(function(){}());!function(){}(); // => true
Run Code Online (Sandbox Code Playgroud)

然而,它似乎并不"安全",因为如果其他人的脚本末尾没有分号:

!function(){}()!function(){}(); // => SyntaxError: Unexpected token !
(function(){}())!function(){}(); // => SyntaxError: Unexpected token !
Run Code Online (Sandbox Code Playgroud)

看起来领先的分号IIFE更好.

;(function() {
  // ...
}());

!function(){}();(function(){}()); // => undefined
(function(){}());(function(){}()); // => undefined
!function(){}();;(function(){}()); // => undefined
(function(){}());;(function(){}()); // => undefined …
Run Code Online (Sandbox Code Playgroud)

javascript function concatenation iife

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

否定自我调用功能?!function($){...}(window.jQuery);

可能重复:
感叹号在功能之前做了什么?

我正在查看Twitter Bootstrap JavaScript代码,我注意到他们所有的插件都包含在否定自我调用函数中.

我知道function ($) { ... }(window.jQuery);立即调用该函数.

但是!为了什么?

javascript jquery negate twitter-bootstrap self-invoking-function

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