深入理解(函数(){})();
1。他被称为立即运行的匿名函数(也称为立即调用函数)。2。当一个匿名函数被封闭,然后在后面添加一个圆括号时,匿名函数可以立即运行!有木头真是太好了。
三.要使用一个函数,我们必须首先声明它的存在,我们最常用的方法是使用函数语句来定义函数。
4、函数对象
函数对象是Javascript中的一个固有对象,所有函数实际上都是一个函数对象。
让我们看看函数对象是否可以直接使用构造函数创建一个新函数,答案是肯定的。
新函数( x
警报(abc(2,3)); 6
5。匿名函数是没有名字的,所以它延伸到我们应该如何称呼他们的o_o。
对匿名函数的调用
函数(x,y){
返回x y;
}
警报(abc(2,3)); 5
上面的操作实际上等同于定义函数的方法,这是我们经常遇到的。
例如,当我们设置DOM元素事件处理函数时,通常不给它们命名,而是给它们相应的事件一个匿名函数。
匿名函数调用
使用()包围匿名函数,然后添加一对括号(包括参数列表)。
(新函数()x
6的作用。括号
圆括号可以阻止表达式的组合,每个块,即每对圆括号都有返回值,返回值实际上是括号中表达式的返回值。
因此,当我们用一对括号包围匿名函数时,实际上括号就是匿名函数的函数对象。
因此,括号加上一个匿名函数就像一个函数,它有一个名称,我们得到它的引用位置,所以如果在引用变量后面加上形参表,就可以实现普通函数的调用形式。
7。函数声明、函数表达式、匿名函数
功能说明:功能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引擎将启动函数关键字作为函数声明错误:需要函数名的需要
在添加圆括号后立即调用函数,函数必须是函数表达式,而不是函数声明。
栗子
(函数(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的内部变量。