犀牛书上有段话不理解在强调什么,求大神们指教:
尽管函数声明和函数表达式都包含了相同的函数名,但是二者仍然不同。两种方式都创建了新的函数对象,但函数声明语句中的函数名是一个变量名,变量指向函数对象。
var f=function(){};
function f(){}
犀牛书上有段话不理解在强调什么,求大神们指教:
尽管函数声明和函数表达式都包含了相同的函数名,但是二者仍然不同。两种方式都创建了新的函数对象,但函数声明语句中的函数名是一个变量名,变量指向函数对象。
var f=function(){};
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执行的时候才会拥有私有作用域。
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
这个就是说
var f = function () {}
的f
是个变量,只是他的指向是一个函数对象,而function f () {}
的f
本身就是一个函数对象。