函数表达式和函数声明/()是一个分组操作符/Module模式/匿名闭包/克隆/function的执行
2014-11-07 10:25
246 查看
函数表达式和函数声明:
function foo(){} // 声明,因为它是程序的一部分
var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分
函数声明会在代码块中被提到最前面,而表达式不会。
alert(fn());
function fn() {
return 'Hello world!';
}
()是一个分组操作符,它的内部只能包含表达式,在使用eval对JSON进行执行的时候,JSON字符串通常被包含在一个圆括号里:eval('(' + json + ')'),这样做的原因就是因为分组操作符,也就是这对括号,会让解析器强制将JSON的花括号解析成表达式而不是代码块。
Module模式
var Calculator = function (eq) {
//这里可以声明私有成员
var eqCtl = document.getElementById(eq);
return {
// 暴露公开的成员
add: function (x, y) {
var val = x + y;
eqCtl.innerHTML = val;
}
};
};
var calculator = new Calculator('eq');
calculator.add(2, 2);
每次用的时候都要new一下,也就是说每个实例在内存里都是一份copy。
匿名闭包
(function () {
// ... 所有的变量和function都在这里声明,并且作用域也只能在这个匿名闭包里
// ...但是这里的代码依然可以访问外部全局的对象
}());
对module进行扩展,添加新的属性:
var module = (function(mod){
mod.moreFunc = function(){};
...
return mod
})(module || (module = {}))
若module已经存在,那么添加新的功能,若不存在,初始化为空对象再添加功能。
克隆
for (key in old) {
if (old.hasOwnProperty(key)) {
my[key] = old[key];
}
}
function的执行
在function后面加个()就能执行一个方法,但是有一个需要注意的地方:
function(){}()
该句会报错,原因是方法是声明式,所以不会生成一个有名字的对象来供()调用,但是用()包围起来当作表达式就可以了:
(function(){})()
function foo(){} // 声明,因为它是程序的一部分
var bar = function foo(){}; // 表达式,因为它是赋值表达式的一部分
函数声明会在代码块中被提到最前面,而表达式不会。
alert(fn());
function fn() {
return 'Hello world!';
}
()是一个分组操作符,它的内部只能包含表达式,在使用eval对JSON进行执行的时候,JSON字符串通常被包含在一个圆括号里:eval('(' + json + ')'),这样做的原因就是因为分组操作符,也就是这对括号,会让解析器强制将JSON的花括号解析成表达式而不是代码块。
Module模式
var Calculator = function (eq) {
//这里可以声明私有成员
var eqCtl = document.getElementById(eq);
return {
// 暴露公开的成员
add: function (x, y) {
var val = x + y;
eqCtl.innerHTML = val;
}
};
};
var calculator = new Calculator('eq');
calculator.add(2, 2);
每次用的时候都要new一下,也就是说每个实例在内存里都是一份copy。
匿名闭包
(function () {
// ... 所有的变量和function都在这里声明,并且作用域也只能在这个匿名闭包里
// ...但是这里的代码依然可以访问外部全局的对象
}());
对module进行扩展,添加新的属性:
var module = (function(mod){
mod.moreFunc = function(){};
...
return mod
})(module || (module = {}))
若module已经存在,那么添加新的功能,若不存在,初始化为空对象再添加功能。
克隆
for (key in old) {
if (old.hasOwnProperty(key)) {
my[key] = old[key];
}
}
function的执行
在function后面加个()就能执行一个方法,但是有一个需要注意的地方:
function(){}()
该句会报错,原因是方法是声明式,所以不会生成一个有名字的对象来供()调用,但是用()包围起来当作表达式就可以了:
(function(){})()
相关文章推荐
- 立即执行函数表达式 项目经常用到js 代码Module模式
- 函数声明、函数表达式、匿名函数、立即执行函数的区别
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。
- javascript(3、4)module模式、立执行函数(Evernote)
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- 函数声明与函数表达式以及立即执行函数的讨论
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字
- 深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.
- 函数声明、函数表达式、匿名函数、立即执行函数
- 立即自执行函数和分组操作符
- 向Windows内核驱动中传递一个函数指针,使其在内核模式下执行
- REGEXP在mysql是用来执行正则表达式的一个函数
- 深入理解函数声明和函数表达式、深入理解立即执行函数(自执行函数)
- 一个分组查询的SQL 常用算法(附源码可直接执行)
- 一个使用TBB Lambda 表达式实现并行执行的例子(转)
- 试图执行的查询中不包含作为合计函数一部分的特定表达式
- 试图执行的查询中不包含作为合计函数一部分的特定表达式 'id'
- 试图执行的查询中不包含作为合计函数一部分的特定表达式的解决方法
- :(~~ 痛苦啊~~构造了一个“没有执行能力”的函数