Js模式问题
js pattern problems
我对我正在阅读的javascript设计模式感到困惑:
var class = (function() {
...a bunch of code...
return {
.. some more code..
;
// or, in some cases
return function(constructorArgs) {
};
})();
我的问题是:return语句在做什么?它为什么在那里?我很困惑,因为没有人愿意提及或谈论它。
我想你提到了两种不同的模式。
关闭匿名
第一种是使用匿名函数包装代码块以创建闭包:
var outer = (function() {
var inner = "now you see me!";
return inner + " now you don't"
})()
匿名函数为var
定义的变量创建一个新的作用域。实际上,这允许您定义仅在该特定函数中可见的变量。
在上面的示例中,您可以访问函数内的inner
,但它没有在函数外定义。
"类"
第二个是在JavaScript中定义"类"的常见模式:
var MyClass = (function() {
function MyClass(arg) {
this.arg = arg
}
return MyClass
})()
通过在闭包中定义构造函数,可以确保类被很好地包含。它还使您能够共享类范围内的状态或私有帮助器方法,而不会污染全局命名空间,或者将它们作为属性放置在类构造函数的原型上。
=
符号右侧的代码为:(function(){})()
;它所做的是编译一个函数-有效地与以下相同:
function temp() {
}
class = temp();
但是,在示例中的函数内部,返回了另一个函数。这意味着class
现在也是一个函数——由于vtortola引用的闭包效应,class
函数可以引用所有在temp
函数中声明的变量等。
这样做的想法是允许内部函数引用一些你不想在"全局"(或半全局)范围内挂着的状态-无论class
方法在哪里调用,或者由谁调用,它都将始终访问该数据。
var myInstance = new class();
虽然我有一种感觉,没有一个代码将工作,因为我有理由肯定,class
是一个保留字…
这叫做闭包。
var myVar = (function (param1, param2){
//do things
}('myParam1','myParam2')):
javascript引擎将立即执行括号之间的内容。
myVar
的值将是函数function (param1, param2){ ... }
返回的值。
这个函数将使用('myParam1','myParam2')
作为参数。
你可以用两种不同的方式写闭包:
(function (receivedArgs){
//do things
})(yourArguments);
或
(function (receivedArgs){
//do things
}(yourArguments));
是闭包。函数返回一个内部函数,中间包含一些变量。
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures欢呼。
相关文章:
- 正则表达式匹配模式或匹配其他所有内容 - 匹配优先级问题
- CKEditor内部的jQuery模式问题与按钮
- 挖空和显示模块模式的数据绑定问题
- j查询模式窗口,刷新父问题
- Type=文本模式问题
- Jquery Dialog模式问题
- 旋转jqueryUI模式的问题
- Javascript策略设计模式问题
- 多个引导模式的滚动问题
- SVG模式动画和背景淡入问题
- Javascript 模块模式问题
- 我应该如何在JS中使用揭示模块模式,传递引用,并避免加载顺序问题
- 为此模式编写正则表达式时遇到问题
- 自定义模式脚本 - Safari 和 IE 问题
- ESLint “max-len” 忽略模式的问题
- 模式对话框中 ui-grid 的大小调整问题不正确
- 可堆叠弹出窗口引导模式关闭问题
- JavaScript 模块模式上下文问题
- 更新现有数据时检索引导模式表单中的复选框字段的值时出现问题
- DOM加载后定义的触发器事件-JIRA打开新的问题模式