深入了解Javascript(})()中的立即执行函数(函数(……))
javascript与其他编程语言相比是随机的,所以javascript代码中充满了各种精彩的写作,有时看,当然能理解各种类型的彩色书写,也对javascript的语言特点有了进一步的深入了解。(函数){ }()(和)(函数(…){ } }(})是编写Javascript立即执行的两种函数的常用方式。起初,我认为它是一个封装匿名函数的括号,然后在后面用括号调用函数,最后在函数定义之后立即实现了目的。后来发现,添加括号的原因不是这样的。要理解函数的立即执行,首先需要了解一些函数的基本概念。
函数声明、函数表达式、匿名函数
功能说明:功能fnname(){…};使用function关键字声明一个函数,然后调用指定函数名,函数的声明。
函数表达式var fnname =函数(){…};使用功能关键字来声明一个函数,但没有命名的功能,并指定匿名函数的一个变量,被调用的函数表达式,这是函数的表达式语法中最常见的一种形式。
匿名函数:函数({)};使用函数关键字声明函数的函数,而不是函数名,也就是所谓的匿名函数,匿名函数属于函数表达式,匿名函数有许多函数,对变量创建函数,给事件处理程序赋予一个事件,或者创建闭包等。
不同的函数声明和函数表达式是在Javascript代码的解析函数声明一个Javascript引擎(函数声明提升)提升当前执行环境(范围)在函数声明和函数表达式,必须等待javascirtp引擎执行的国内航线之前,将形成一个连续的解析函数表达式可以加入括号立即调用函数,后面的两个函数表达式不能函数声明,只fnname(电话)。以下是这两者之间的区别的两个例子。
复制代码代码如下所示:
FnName();
功能fnname(){
…
}
正常情况下,因为在函数声明之前提升函数声明、函数调用。
FnName();
fnname =函数(){ var
…
}
/ /错误,变量fnname不坚持功能参考,函数调用必须功能后的表达
复制代码代码如下所示:
fnname =函数(){ var
警报('Hello World);
(});
函数表达式后跟圆括号,当Javascript引擎解析到这里时,可以立即调用函数。
功能fnname(){
警报('Hello World);
(});
不错,但Javascript引擎只有解析函数声明,忽略函数声明后的括号,将不被调用。
函数(){
console.log('Hello World);
(});
语法错误,尽管匿名函数属于函数,但不是赋值,
因此,Javascript引擎将启动函数关键字作为函数声明错误:需要函数名的需要
经了解,一些功能的基本概念,回顾(function(){…})()和(函数(){…(2)})立即执行函数写的,起初我以为这是一个圆括号和匿名函数,后面的圆括号立即调用函数,然后不知道为什么括号,于是明白,在函数体中依次括号可以立即调用这个函数必须是一个函数表达式。不是函数声明。
复制代码代码如下所示:
(函数(a){)
console.log(一); / / Firebug输出123、使用()运算符
})(123);
(函数(a){)
console.log(一); / / Firebug输出1234、使用()运算符
}(1234);
函数(a){
console.log(一); / / Firebug输出12345,使用!操作人员
}(12345);
+函数(a){
console.log(一); / / Firebug输出123456,使用+运算符
}(123456);
-函数(a){
console.log(一); / / Firebug输出1234567,使用运算符
}(1234567);
函数(a){
console.log(一); / / Firebug输出12345678,使用=操作符
}(12345678)
您可以看到输出,将其添加到函数前面!,+,甚至逗号,直到函数定义在函数之后立即执行,和(),!+,=,=操作符将转换成函数声明函数,消除javascript引擎识别函数表达式和函数声明的多义性,告诉Javascript引擎这是一个函数,而不是函数语句,可以在后面添加圆括号,并立即执行函数代码。
添加圆括号是最安全的事情,因为!+、-和其他运算符也可以使用函数的返回值操作,有时会造成不必要的麻烦。
但是这种写作方式有什么用呢
Javascript没有使用私人领域的概念,如果在许多开发项目,你声明一些变量在全局或局部范围,其他人可能会不小心用一个变量名称相同的覆盖,根据作用域链的Javascript函数的特性,你可以使用这个技术可以模仿一个私人领域,使用匿名函数作为一个容器,该容器可以访问外部变量,而外部环境没有获得容器变内部,所以(function(){…})())()内定义的变量,不与外部变量冲突,通常被称为一个匿名的包装或命名空间。
jQuery正在使用这个方法,将jQuery代码封装在(函数(窗口,未定义的){代码…}(窗口)中,当在全局范围内调用jQuery代码时,可以保护jQuery的内部变量。
本文是一种个人的认识和整理。
Javascript权限指南