相关疑难解决方法(0)

解释封装的匿名函数语法

摘要

你能解释一下JavaScript中封装的匿名函数语法背后的原因吗?为什么这样做:(function(){})();但这不是:function(){}();


我知道的

在JavaScript中,可以创建一个这样的命名函数:

function twoPlusTwo(){
    alert(2 + 2);
}
twoPlusTwo();
Run Code Online (Sandbox Code Playgroud)

您还可以创建匿名函数并将其分配给变量:

var twoPlusTwo = function(){
    alert(2 + 2);
};
twoPlusTwo();
Run Code Online (Sandbox Code Playgroud)

您可以通过创建匿名函数来封装代码块,然后将其包装在括号中并立即执行:

(function(){
    alert(2 + 2);
})();
Run Code Online (Sandbox Code Playgroud)

这在创建模块化脚本时非常有用,可以避免使当前作用域或全局作用域混乱,并且可能存在冲突的变量 - 例如Greasemonkey脚本,jQuery插件等.

现在,我理解为什么会这样.括号包含内容并仅公开结果(我确定有更好的方法来描述),例如with (2 + 2) === 4.


我不明白

但我不明白为什么这也不起作用:

function(){
    alert(2 + 2);
}();
Run Code Online (Sandbox Code Playgroud)

你能解释一下吗?

javascript syntax anonymous-function

364
推荐指数
4
解决办法
7万
查看次数

我应该在JavaScript中使用分号吗?

我只编写了少量运行嵌入Java应用程序的JavaScript,但它是使用QUnit测试的,已经混合了,我还没有注意到任何问题.

是否有一些传统的智慧是否在JavaScript中使用分号?

javascript

26
推荐指数
6
解决办法
8581
查看次数

在声明之前引用JavaScript值 - 有人可以解释这一点

我希望有人可以向我解释为什么在浏览器中查看HTML时,下面的JavaScript/HTML会显示"门#2":

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <script type="text/javascript">
        function testprint() {
            alert('door #1');
        };

        window.onload = testprint;

        function testprint() {
            alert('door #2');
        };

        testprint = function() {
            alert('door #3');
        };
    </script>
    <script type="text/javascript">
        function testprint() {
            alert('door #4');
        };
    </script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

由于只有声明testprintwindow.onload设置之前发生testprint,我希望window.onload原因'门#1'出现.实际上,onload导致'门#2'.请注意,无论是否包含第一个声明,它都会执行此操作testprint.

第三个和第四个testprint使用声明使用不同的方式来分配函数,我试着看看它是否会覆盖window.onload同样的第二个声明的testprint行为.它没.请注意,如果我将第四个声明移动到第testprint一个脚本块的末尾,它将被调用window.onload.

javascript

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

Javascript对象内部函数的区别

对象中的函数之间有什么区别.我有两个基本上做同样事情的例子.

function a(param) {
   function b(input) {
      return input%10;
   };
return 'The result is ' + b(param);
};
Run Code Online (Sandbox Code Playgroud)

function a(param) {
   this.b=function(input) {
      return input%10;
   };
return 'The result is ' + this.b(param);
};
Run Code Online (Sandbox Code Playgroud)

两种情况下的优点和缺点是什么?在第二个我知道可以从主函数外部调用该函数.运行时还有区别吗?(比如时间和表现)

javascript

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

缺少分号时Javascript未定义类函数

function Foo() {
    var that = this;
    that.bar = function() {}
    that.baz = function() {}

    (function() {
        that.baz();
    }());
}
new Foo;
Run Code Online (Sandbox Code Playgroud)

Uncaught TypeError: Object #<Foo> has no method 'baz'

that.bar工作正常,它只是最后一个不存在的功能.;baz函数定义之后添加一个修复所有内容.

我知道排除;可以弄乱一些事情,但我认为你肯定不应该放弃;功能.没有语言可以做到.为什么;baz函数之后排除导致此错误?我应该;在我的功能定义之后吗?

javascript

3
推荐指数
2
解决办法
899
查看次数

返回匿名函数是否应该以分号结尾?

MDN使用我提供的第二个代码,它可以正常运行,但最后会引发错误。他们为什么用分号结束匿名功能?如果匿名函数不存在于函数表达式中,可以吗?如果函数不是函数表达式,则不应以分号结尾。

function makeAdder(x) {
  return function(y) {
    return x + y;
  }
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12
Run Code Online (Sandbox Code Playgroud)

function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12
Run Code Online (Sandbox Code Playgroud)

javascript

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

如何在jQuery中正确调整变量范围?

我正在研究一个jQuery插件,但是在使我的变量适当缩放时遇到了一些麻烦.这是我的代码中的一个例子:

(function($) {

$.fn.ksana = function(userOptions) {
    var o = $.extend({}, $.fn.ksana.defaultOptions, userOptions);

    return this.each(function() {
        alert(rotate()); // o is not defined
    });
};

function rotate() {
    return Math.round(o.negRot + (Math.random() * (o.posRot - o.negRot)));
};

$.fn.ksana.defaultOptions = {
    negRot: -20,
    posRot: 20
};

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我试图让私有函数旋转以便能够看到o变量,但它只是保持警告'o未定义'.我不确定我做错了什么.

javascript jquery scope

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

如何在javascript中处理点击事件?

今天是我上新工作的第一天(大型网站上的前端负责人.)我的任务之一是实现一个按钮,在点击事件时触发事件.我不知道,所以在谷歌搜索后,我想出了这个:

<html>
<head>
<script type="text/javascript">
function popup(); 
{
    alert("Hello World") ==> alert("Hello World");
}
</script>
</head>
<body>

<input type="button" value="Click Me!" onclick="popup()"></input><br></br>

</html>    
</body>
Run Code Online (Sandbox Code Playgroud)

问题是,当我点击我的按钮时,没有任何反应.

编辑根据MICHEL的评论更新

javascript architecture design-patterns

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