扫码关注官方订阅号
犀牛书上有段话不理解在强调什么,求大神们指教:
尽管函数声明和函数表达式都包含了相同的函数名,但是二者仍然不同。两种方式都创建了新的函数对象,但函数声明语句中的函数名是一个变量名,变量指向函数对象。var f=function(){};function f(){}
欢迎选择我的课程,让我们一起见证您的进步~~
这个就是说var f = function () {}的f是个变量,只是他的指向是一个函数对象,而function f () {}的f本身就是一个函数对象。
var f = function () {}
f
function 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);};
所以两种声明方式在运行时候还是有区别的
这个其实是变量和函数的预解释问题。在当前作用域下,在JS代码执行之前,浏览器会对带var和带function进行提前声明或定义;在浏览器解析代码的过程中,用var声明的变量只声明不定义,值是undefined。而function既声明又定义。function()这种形式会在预解释阶段开辟一个空间地址,把函数体中的所有JS代码做为字符串存在这个空间,把空间地址赋值给函数名。而var fn = function这种形式只有在fn执行的时候才会拥有私有作用域。
第一个是将变量f指向一个匿名函数,第二个是声明一个函数名为f的函数
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这个就是说
var f = function () {}的f是个变量,只是他的指向是一个函数对象,而function f () {}的f本身就是一个函数对象。变量声明提升之后 实际上的运行顺序是
所以两种声明方式在运行时候还是有区别的
这个其实是变量和函数的预解释问题。在当前作用域下,在JS代码执行之前,浏览器会对带var和带function进行提前声明或定义;在浏览器解析代码的过程中,用var声明的变量只声明不定义,值是undefined。而function既声明又定义。function()这种形式会在预解释阶段开辟一个空间地址,把函数体中的所有JS代码做为字符串存在这个空间,把空间地址赋值给函数名。而var fn = function这种形式只有在fn执行的时候才会拥有私有作用域。
第一个是将变量f指向一个匿名函数,第二个是声明一个函数名为f的函数