js函数的深入理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/enjoy_sun_moon/article/details/83573111

1.函数声明

2.函数表达式

3.匿名函数

函数声明:function fnName(){,,,} 使用function关键字声明一个函数  再指定一个函数名  叫做函数声明

函数表达式:functioin(){...}  使用function关键字声明一个函数  不指定函数名 最后将函数赋值给一个变量 叫做函数表达式

 匿名函数:function(){。。。}使用function关键字声明一个函数,不指定函数名,也不赋值给变量  叫做匿名函数  匿名函数属于函数表达式,匿名函数有很多作用,赋值给一个变量成为一个函数,赋予给一个时间成为一个程序。

函数表达式和函数声明的区别是:

一.函数声明提升,而函数表达式必须等到javascript引擎执行到她所在的行时,才会一行一行的解析函数表达式

二.函数表达式后面可以加括号 表示代码执行到此的时候立即执行,而函数声明不可以

代码示例:
fnName();
function fnName(){
    ...
}
//正常,因为‘提升'了函数声明,函数调用可在函数声明之前
fnName();
var fnName = function (){
    ...
}
//报错,fnName还未保存对函数的引用,函数调用必须在函数表达式之后
var fnName=function(){
    alert('Hello World');
}();
//函数表达式后面加括号,当javascript引擎解析到此处时能立即调用函数

function fnName(){
    alert('Hello World');
}();
//不会报错,但是javascript引擎只解析函数声明,忽略后面的括号,函数声明不会被调用

function (){}()

//报错   虽然属于函数表达式  但是未进行复制操作

var fnName = function(){...}()

!function(){}()

+function(){}()

-function(){}()

上面的函数当代码执行到此的时候都会立即执行    !+-

重点在这里

现在看看 (function(){。。。})()

结果是立即调用()里面的函数    可以用function(){}写建立一个私有域    私有域里可以访问全局变量  全局变量却访问不了 私有域内的变量,所以(function(){})()内部的变量不会和外部的变量发生冲突  俗称  匿名包裹器和命名空间

猜你喜欢

转载自blog.csdn.net/enjoy_sun_moon/article/details/83573111
今日推荐