js如何创建函数

JavaScript014

js如何创建函数,第1张

JS中创建函数的几种方法

声明函数:最普通最标准的声明函数方法,包括函数名及函数体。

function fn1(){}

创建匿名函数表达式:创建一个变量,这个变量的内容为一个函数

var fn1 = funciton (){}

创建具名函数表达式:具名函数表达式的函数名只能在创建函数内部使用,即采用此种方法创建的函数在函数外层只能使用fn1不能使用func_name的函数名。func_name的命名只能在创建的函数的内部使用

var fn1 = funciton func_name(){}

自执行函数:自执行函数属于上述的“函数表达式”,规则相同

(function(){alert(1)})()

(function fn1(){alert(1)})()

Function构造函数

可以给 Function 构造函数传一个函数字符串,返回包含这个字符串命令的函数,此种方法创建的是匿名函数。

其他创建函数的方法

当然还有其他创建函数或执行函数的方法,这里不再多说,比如采用 eval , setTimeout , setInterval 等非常用方法,这里不做过多介绍,属于非标准方法,这里不做过多展开

JS函数的定义方式比较灵活,它不同于其他的语言,每个函数都是作为一个对象被维护和运行的。

先看几种常用的定义方式:

function func1([参数]){

/*函数体*/

}

var func2=function([参数]){

/*函数体*/

}

var func3=function func4([参数]){

/*函数体*/

}

var func5=new Function()

上述第一种方式是最常用的方式,不用多说。

第二种是将一匿名函数赋给一个变量,调用方法:func2([函数])

第三种是将func4赋给变量func3,调用方法:func3([函数])或func4([函数])

第四种是声明func5为一个对象。

再看看它们的区别:

function func(){

//函数体

}

//等价于

var func=function(){

//函数体

}

但同样是定义函数,在用法上有一定的区别。

<script>

//这样是正确的

func(1)

function func(a)

{

alert(a)

}

</script>

<script>

//这样是错误的,会提示func未定义,主要是在调用func之前没有定义

func(1)

var func = function(a)

{

alert(a)

}

//这样是正确的,在调用func之前有定义

var func = function(a)

{

alert(a)

}

func(1)

</script>

用同样的方法可以去理解第三种定义方式。

第四种定义方式也是需要声明对象后才可以引用。

javascript 函数声明提升,函数体是否会一起被提升?

如果不是,有如下反例:

console.log(demo.toString())//‘function demo() {console.log('ok')}’

demo()//‘ok’

function demo() {

console.log('ok')

}

如果是,有如下反例:

console.log(func)  // undefined   ,如果直接执行func()函数抛出TypeError异常

if(true){

function func() {

console.log('11')

}

}else{

function func() {

console.log('22')

}

}

func()// 11

第一个例子说明函数体同样是被提升了的,如果按照这个思路来理解第二段代码,“重命名”函数会相互覆盖,后面的会覆盖前面的,所以,console.log(func)会输出‘function func() {console.log('22')}’ 这个字符串,但是实际并非如此。

因此产生了三个疑问:

请问要如何理解“变量提升,函数优先”呢?

函数体是不是同样提升?

第二段代码的运行结果如何解释?