js中立即执行函数

定义函数的方式

  1. 函数声明(Function Declaration)
  2. 函数表达式(Function Expression)
  3. new Function构造函数

基本概念

函数声明:function fname(){…};使用function关键字声明一个函数,再指定一个函数名
函数表达式:var fname=function funame{…};使用function关键字声明一个函数,可以给函数命名也可以不给函数命名,最后将函数赋予给一个变量。
匿名函数:function(){};使用function关键字声明一个函数,但未给函数命名。(匿名函数也属于函数表达式,匿名函数的作用很多,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序等)

函数声明和函数表达式的区别:
1.函数声明提前。
2.函数表达式后面加()立即调用该函数,函数声明只能以fname()调用。

声明提前

表现:

  1. 变量声明会提前到函数的顶部
  2. 只是声明被提前,初始化不提前,初始化还在原来初始化的位置进行初始化
  3. 在初始化之前变量的值是undefined
var aerchi='aerchi';
function aerchiToShow(){
    console.log(aerchi); // undefined
    var aerchi='aerliho';
    console.log(aerchi); //aerliho
}
aerchiToShow();

声明提前后的效果:

var aerchi='aerchi';
function aerchiToShow(){
	var aerchi;//把变量aerchi的值变成了undefined
    console.log(aerchi); // undefined
    aerchi='aerliho';
    console.log(aerchi); //aerliho
}
aerchiToShow();
函数调用
//可以在声明之前的位置被调用  
var size=show("call before function");    
function show(str){  
   console.log(str);  
};  
//可以在声明之后的位置被调用  
var size2=show("call after function");
函数表达式
//会报错,变量aa 还未保存对函数的引用,函数调用必须在函数表达式之后 
var aa = showM("call before function");    
var showM = function(str){  
   console.log(str);  
};
var showM = function(str){  
   console.log(str);  
};  
//只能在函数表达式定义之后被调用
var bb = showM("call after function");  
立即执行函数(IIFE)

只有函数表达式才能实现立即执行

 (function(a){ console.log(a); })(123);  
 (function(a){ console.log(a); }(1234));  
 !function(a){ console.log(a); }(12345);  
 +function(a){ console.log(a); }(123456);  
 -function(a){ console.log(a); }(1234567);
 new function(a){ console.log(a); }(12345678);  

匿名函数也是函数表达式为何不能立即执行呢,因为匿名函数开始的function会被JavaScript引擎识别为函数声明的开始,所以加上括号也不会被执行,而加上(),!,+,-等符号可以执行,是因为加上这些符号就可以告诉JavaScript引擎这不是函数声明了。

函数表达式的执行顺序
var getName = function () { 
    console.log('var getName 1');
};
function getName() { 
    console.log('function getName 1');
}
var getName = function () { 
    console.log('var getName 2'); //此函数表达式会被执行
};
function getName() { 
    console.log('function getName 2');
}
getName();

上述代码的执行结果是:var getName 2。
原因是这样的,var声明的变量和函数声明function都会被提升,但是函数声明的提升的级别是比var要高的.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值