1、函数声明、函数表达式、匿名函数
针对函数声明:function fnname()使用function关键字声明一个函数,再指定一个函数名。叫做函数声明
函数表达式 var fnname=function(){},使用function关键字声明一个函数,但没有给函数命名,最后将匿名函数赋予一个变量。叫做函数表达式,这是最常见的函数表达式语法形式。
函数声明和函数表达式不同之处在于,一、Javascript引擎在解析javascript代码时会‘函数声明提升'(Function declaration Hoisting)当前执行环境(作用域)上的函数声明,而函数表达式必须等到Javascirtp引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式,二、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以fnName()形式调用 。以下是两者差别的两个例子。
复制代码 代码如下:
fnName(); function fnName(){ ... } //正常,因为‘提升'了函数声明,函数调用可在函数声明之前 fnName(); var fnName=function(){ ... } //报错,变量fnName还未保存对函数的引用,函数调用必须在函数表达式之后在函数体后面加括号可以实现立即调用,这个函数必须是函数表达式。
只有var fname=function(){}()可以进行立即执行
function fname(){}()不会报错,但是只会解析函数声明,不会进行直接调用。
function(){}()//语法错误,虽然匿名函数属于函数表达式,但是没有进行赋值
优点:
可以将自己的业务数据封装到一个容器之中。容器内部可以访问外部的变量,而外部环境不能
访问容器内部的变量。因此 内部定义的变量不会和外部变量发生冲突。俗称“匿名包裹器”或者“命名空间”