javascript - 函数声明与函数表达式
天蓬老师
天蓬老师 2017-04-11 12:39:17
[JavaScript讨论组]

犀牛书上有段话不理解在强调什么,求大神们指教:

尽管函数声明和函数表达式都包含了相同的函数名,但是二者仍然不同。两种方式都创建了新的函数对象,但函数声明语句中的函数名是一个变量名,变量指向函数对象。
var f=function(){};
function f(){}

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(4)
PHPz

这个就是说var f = function () {}f是个变量,只是他的指向是一个函数对象,而function f () {}f本身就是一个函数对象。

天蓬老师
console.log(f);// function f(){console.log(2);}
var f=function(){console.log(1);};
function f(){console.log(2);}

变量声明提升之后 实际上的运行顺序是

var f;
function f(){console.log(2);}
console.log(f);// function f(){console.log(2);}
f=function(){console.log(1);};

所以两种声明方式在运行时候还是有区别的

ringa_lee

这个其实是变量和函数的预解释问题。在当前作用域下,在JS代码执行之前,浏览器会对带var和带function进行提前声明或定义;在浏览器解析代码的过程中,用var声明的变量只声明不定义,值是undefined。而function既声明又定义。function()这种形式会在预解释阶段开辟一个空间地址,把函数体中的所有JS代码做为字符串存在这个空间,把空间地址赋值给函数名。而var fn = function这种形式只有在fn执行的时候才会拥有私有作用域。

PHPz

第一个是将变量f指向一个匿名函数,第二个是声明一个函数名为f的函数

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号