Javascript即时执行功能的深入分析
当然,这也是通过了解不同的写作风格来进一步了解Javascript语言的特点。
Javascript函数语法
函数是插入在括号中的代码块,前面使用关键字函数。
函数的函数名()
{
下面是要执行的代码
}
调用函数时,执行函数中的代码。
当事件发生时,可以直接调用函数,例如用户单击按钮时,可以在Javascript的任何位置调用该函数。
提示:Javascript对大小写敏感,关键字函数必须小写,函数必须与函数名相同大小。
(函数){ }()(和(函数){(}(})))是两种Javascript即时执行函数的常用编写方法;
起初我认为它是一个插入在匿名函数中的括号,然后在后面添加一个括号调用函数,最后在函数定义之后立即执行这个函数。
后来发现括号的原因不是这样的。要理解函数的立即执行,首先需要了解一些函数的基本概念。
函数声明、函数表达式、匿名函数
功能说明:功能fnname(){…};使用function关键字声明一个函数,然后调用指定函数名,函数的声明。
函数表达式:VaR fnname =函数(){…};使用功能关键字来声明一个函数,但没有命名的功能,并指定匿名函数的一个变量,被调用的函数表达式,这是函数的表达式语法中最常见的一种形式。
匿名函数:函数({)};使用函数关键字声明函数的函数,而不是函数名,也就是所谓的匿名函数,匿名函数属于函数表达式,匿名函数有许多函数,对变量创建函数,给事件处理程序赋予一个事件,或者创建闭包等。
函数声明不同于函数表达式。
一个Javascript引擎将增强函数声明时解析Javascript代码(函数声明提升)当前执行环境(范围)在函数声明和函数表达式,必须等待javascirtp引擎执行其国内线直到,只能从下一行解析;
两。函数添加到括号中后可以立即调用函数表达式。函数声明称不上,只能在fnname形式称为()。
实例uff1a
FnName();
功能fnname(){
…
}
因为在函数声明之前,升级、正常、函数声明、函数调用
FnName();
无功fnname =函数(){()
…
} / /错误,变量fnname不坚持功能参考,函数调用必须功能后的表达
无功fnname =函数(){()
警报(Hello World);
(});
函数表达式后跟圆括号,当Javascript引擎解析到这里时,可以立即调用函数。
功能fnname(){
警报(Hello World);
(});
不错,但Javascript引擎只有解析函数声明,忽略函数声明后的括号,将不被调用。
函数(){
console.log(Hello World);
(});
语法错误,尽管匿名函数属于函数,但不是赋值,
因此,Javascript引擎将启动函数关键字作为函数声明,
错误报告:需要一个函数名
在理解了一些函数的基本概念之后,回顾一下函数(){(})(和)(函数(){…}())编写这两个立即执行函数,
起初,我认为它是一个括号,它封装了匿名函数,在添加括号之后立即调用函数,我不知道为什么添加了括号。
后来,很显然,函数必须被称为函数表达式,而不是函数声明,如果函数函数后可以立即调用括号。
(函数(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函数的特性,您可以使用此技术可以模拟私有域,使用匿名函数作为容器}()())内部定义的变量不与外部变量冲突,通常称为匿名包或名称空间。
jQuery正在使用这个方法,将jQuery代码封装在(函数(窗口,未定义的){代码…}(窗口)中,当在全局范围内调用jQuery代码时,可以保护jQuery的内部变量。
以上内容是一个小编辑器,介绍了javascript的即时执行功能,希望大家喜欢它。