Amy*_*y B 55 javascript function
均低于警戒这些代码块foo,然后bar.唯一的区别是})()和}()).
代码1:
(function()
{
bar = 'bar';
alert('foo');
})();
alert(bar);
Run Code Online (Sandbox Code Playgroud)
代码2:
(function()
{
bar = 'bar';
alert('foo');
}());
alert(bar);
Run Code Online (Sandbox Code Playgroud)
除了语法之外,还有什么区别吗?
SLa*_*aks 59
没有; 他们是相同的
但是,如果您new事先添加,.something之后添加,则会有所不同.
new (function() {
this.prop = 4;
}) ().prop;
Run Code Online (Sandbox Code Playgroud)
此代码创建此函数类的新实例,然后获取prop新实例的属性.
它回来了4.
它相当于
function MyClass() {
this.prop = 4;
}
new MyClass().prop;
Run Code Online (Sandbox Code Playgroud)
new ( function() {
return { Class: function() { } };
}() ).Class;
Run Code Online (Sandbox Code Playgroud)
此代码调用new上的Class财产.
由于函数调用的括号在外部括号中,因此new表达式不会拾取它们,而是正常调用函数,返回其返回值.
该new表达式解析到.Class和实例化.(后面的括号new是可选的)
它相当于
var namespace = { Class: function() { } };
function getNamespace() { return namespace; }
new ( getNamespace() ).Class;
//Or,
new namespace.Class;
Run Code Online (Sandbox Code Playgroud)
如果没有调用周围的括号getNamespace(),则会将其解析为(new getNamespace()).Class- 它将调用实例化getNamespace类并返回Class新实例的属性.
没有区别.两者都是函数表达式.
还有第三种方式:
+function() {
bar = 'bar';
alert('foo');
}();
Run Code Online (Sandbox Code Playgroud)
(而不是+另一个操作员也会工作)
最常见的方式是
(function() {
// ...
})();
Run Code Online (Sandbox Code Playgroud)
虽然.
| 归档时间: |
|
| 查看次数: |
5901 次 |
| 最近记录: |