请看以下两个函数:
function a(){
alert( "a" )
}
|
var b = function (){
alert( "b" )
}
|
它们俩有何不同呢?翻开书,作者会告诉我们,前者为函数声明,后者为函数表达式。函数声明作为一种声明,当然会在预编译阶级有所动作(声明提前),而函数表达式则不会。另一个区别是,函数声明不能直接加一对括号让它们执行。第三个区别,表达式还可以继续细分,表达式是由常量,变量,操作符,函数等组合而成,计算以后返回一个结果值,至少也会返回一个undefined。
function a (){
alert( "a" )
}();
|
var b = function (){
alert( "b" )
}();
|
( function foo(){});
var bar = function foo(){};
new function bar(){};
|
给 function 外套一对括号(分组操作符)就不报错了,括号是表达式,是表达式就有返回值,所以可以在后面加一对括号让它们执行,再看
( function a (){
alert( "a" )
})();
|
另外,我们知道,函数名的作用就是用来引用的,现在没用了,我们是不是可以把它去掉呢?
( function (){
alert(arguments.callee)
})();
|
知道这个,我们就可以方便地递归自身了。如弄一个深拷贝函数
var deepExtend = function (destination, source) {
for ( var property in source) {
if (source[property] && source[property].constructor &&
source[property].constructor === Object) {
destination[property] = destination[property] || {};
arguments.callee(destination[property], source[property]);
} else {
destination[property] = source[property];
}
}
return destination;
};
|
另外,从另一方便也启法了我们如何兼价地批量生产各种各样的自动执行函数。因为把函数转换为表达式的方法并不一定要靠分组操作符,我们还可以用void操作符,~操作符,!操作符……
void function (){
alert( "司徒正美" );
}()
|
0, function (){
alert( "司徒正美" );
}();
|
- function (){
alert( "司徒正美" );
}();
|
+ function (){
alert( "司徒正美" );
}();
|
! function (){
alert( "司徒正美" );
}();
|
~ function (){
alert( "司徒正美" );
}();
|
typeof function (){
alert( "司徒正美" );
}();
|
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库