JavaScript立即执行函数

一.先说说JavaScript函数声明的几种方式

1.函数声明

使用function关键字,并指定函数名。

function a() {
  console.info('a****')
}

2.函数表达式

用function关键字声明函数,但是未指定函数名,其实就是一个匿名函数并把这个匿名函数赋予一个变量。

var b = function () {
  console.info('b****')
}

其实函数表达式声明也可以指定函数名,不过没什么用。

var b = function () {
  console.info('b****')
}
b();//b

var c = function testC() {
  console.info('c*******')
}

c();//c
testC();//ReferenceError: testC is not defined

3.匿名函数

使用function关键字声明函数,但是不指定函数名。匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或者闭包等等。

function() {
    // coding
}

二.函数声明和函数表达式的不同

1.函数声明可以在当前作用域下提前调用执行,函数表达式需要等执行到该函数后才能执行,不可提前调用。因为JavaScript在加载时会先去加载变量和函数声明,会去赋值。注意赋值操作如果是普通变量,就回直接赋值,如果是函数,只是把函数地址赋予变量,变量成为函数的引用。然后逐行执行JavaScript代码。下面这个例子,函数声明这种写法,在JavaScript加载的时候方法就已经存在于内存中了,而调用则是在之后的逐行执行中走到了这里。

setFn()
function setFn() {
    // coding  
}
// 正常,函数声明可提前调用

setFn()
var setFn = function() {
    // coding
} 
// 报错,setFn未保存对函数的引用,函数调用需放在函数表达式后面

2.函数表达式尅直接在函数后面加括号调用。

立即执行函数可能可能看上去不那么习惯,只要记住一点,()表示在加载的时候不仅仅是声明函数,而是把函数执行完。如下面这个例子,除了f以外,其他写法都正确,f报错没有函数名。

var b = function () {
  console.info('b****')
}
b();//b

var c = function testC() {
  console.info('c*******')
}()

var d = (function() {
  console.info('d*******')
}());

(function(){
  console.info('e*******')
})()//对

(function() {
  console.info('f*******')
}());//错

3.加运算符确实可将函数声明转化为函数表达式,而之所以使用括号,是因为括号相对其他运算符会更安全,可以减少不必要的麻烦。

!function(){
    console.log(1)
}()
// 1
    
+function(){
    console.log(2)
}()
// 2
    
-function(){
    console.log(3)
}()
// 3
    
(function(){
    console.log(4)
})()
// 4

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值