本文主要介绍JavaScript函数IIFE的详细使用说明,通过示例代码详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
一、认识函数
javaScritp中的函数
//函数声明语法定义
函数fun1(姓名,年龄){
console.log(姓名','年龄);
}
fun1('艾米',18);//艾米,18岁
//函数表达式定义
var fun2=函数(姓名,年龄){
console.log(姓名','年龄);
}
fun1('艾米',18);//艾米,18岁
带有默认参数的JavaScript函数
/*默认参数*/
函数fun1(姓名,年龄=17) {
console.log(姓名','年龄);
}
fun1('艾米',18);//艾米,18岁
fun1('艾米',' ');//艾米,
fun1('艾米');//艾米,17岁
fun1('Amy ',null);//Amy,null
函数参数的默认值存在一个临时死区。在函数参数默认值的表达式中,没有初始化的参数值不能作为其他参数的默认值。
函数fun2(x,y=x) {
console.log(x,y);
}
fun 2(1);//1 1
函数fun3(x=y) {
console . log(x);
}
fun 3();//ReferenceError: y未定义
javaScript函数的不定参数
//不定参数用来表示不确定参数的个数。
函数fun4(.值){
console . log(values . length);
}
fun4(1,2);//2
fun4(1,2,3,4);//4
函数的结构定义
通过函数构造器创建函数,可以向构造器中传入任意数量的参数,但值得注意的是,传入的最后一个参数将作为函数体,其他参数将作为参数传入函数。不建议使用这种方法定义函数,因为这种语法会导致两次解析代码,第一次解析常规ECMAScript代码,第二次解析构造函数的字符串,影响性能。
Var name=newfunction ('value ',‘函数体’);
var f2=新函数(' n1 ',' n2 ',' return n1 n2');
console.log(f2(1,2));//3
注意:函数是值类型的引入,所以函数名只是函数的指针。当函数名用来给另一个变量名赋值时,只复制一个指针。即当后面的A设置为null时,只消除A中存储的指针,不会影响b调用的函数。
var a=b=函数(值1){
返回值1;
}
a=空;
b(1);
function中的默认对象叫做arguments,类似于数组,但不是数组。这个对象是传递给函数的参数。我们可以通过这个自变量知道这个函数有多少个参数。
函数计数器(){
var sum=0;
for(var I=0;I参数.长度;i ){
sum=参数[I];
}
返回总和;
}
console.log(计数器(199,991,1,2,3,4,5));//1205
console . log(counter());//0
注意:这里的arguments是一个隐式对象,也是在没有声明的函数中。内部函数可以访问外部函数的任何内容,但是它不能直接访问外部函数的参数和this对象。
函数f1() {
控制台. log(arguments . length);
f2=函数(){
控制台. log(arguments . length);
}
返回F2;
}
var f=f1(1,2,3);//3
f();//0
function . Call-调用一个对象的方法,用另一个对象替换当前对象。
/*构造函数*/
函数学生(姓名,年龄){
this.name=name
this.age=年龄;
}
show=function(添加){
console.log(添加':' this.name ',' this . age);
}
//通过new关键字调用构造函数创建一个对象tom
var rose=新生(' rose ',18);
var jack=新生(' jack ',20);
//调用show方法,指定上下文,指定调用对象,这个指向rose,“大家好是参数”
Show.call(rose,'大家好');//大家好:rose,18
show.call(杰克,'你好');//你好:杰克,20岁
调用方法中的参数可以省略。第一个参数指示调用该方法的对象,或者该方法指向谁。如果没有指定,它将指向窗口对象。
Var name='无名';
var年龄=18;//全局变量
show . call();//未定义:未知,18
立即执行表达式函数(IIFE)
级别范围和功能范围
函数计算(){
for(var I=0;i5;i ){
console.log(一);////0,1,2,3,4
}
console.log(一);//5
}
calc();
函数没有块级作用域,所以我后来输出的是5,没有报错。
方法来模拟块级范围。
函数计算(){
//生活
(函数(){
for(var I=0;i5;i ) {
console.log(一);//0,1,2,3,4
}
})();
console.log(一);//报告错误
}
calc();
立即执行表达式或匿名对象。
//调用匿名函数
(函数(){
Console.log('这是函数表达式');
})();
//调用匿名对象
({
姓名:'福',
show: function() {
console . log(this . name);
}
}).show();
console.log({a: 1})。a);
console.log({a: function() {})。a());
各种函数的直接表达式的书写方法
//两种最常用的书写方法
(function(){/* code */}());//推荐的书写方法
(function(){/* code */})();//当然,这个也可以。
//括号和JS的一些运算符(比如=||)等。)可以消除函数表达式和函数声明的歧义。
//在下面的代码中,解析器已经知道一个是表达式,所以会将另一个默认为表达式。
//但是如果两者互换,就会报错
var I=function(){ return 10;}();
true function(){/* code */}();
0,function(){/* code */}();
//如果不怕代码晦涩,也可以选择一元运算符。
!function(){/* code */}();
~ function(){/* code */}();
-function(){/* code */}();
function(){/* code */}();
//你也可以这样做。
new function(){ /* code */}
new(){/* code */}()//带参数
带参数的立即表达式函数
(函数(n){
console . log(n);//100
})(100);
最好在立即表达式函数前加一个分号。
var k=100
(函数(n){
console . log(n);
})(k);
//错误,解释器会认为100是一个函数
var k=100
;(函数(n){
console . log(n);
})(k);
生命的变形
(函数(n){
console . log(n);
//觉得这里有30000个代码
}(100));
如果中间有很长的代码,那么参数100只能在文档的末尾看到。变形的结果:
(函数(表达式){
exp(100);
}(函数(n){
console . log(n);
//觉得这里有30000个代码
}));
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。