JS 函数声明和变量声明的提升顺序

现在统一都认为函数声明的提升优先于变量声明的提升,能不能给个例子证明这一观点?

下面的例子,并不能论证这一观点

console.log(person); //ƒ person() { console.log('function')}
function person() {
    console.log('function')
}
console.log(person); //ƒ person() { console.log('function')}
var person = "variable";
console.log(person);//variable

无论是变量声明还是函数声明哪个优先,结果都是一样的;

// 假设变量声明优先,实际代码如下
var person;
function person() {
    console.log('function')
}
console.log(person); //ƒ person() { console.log('function')}
console.log(person); //ƒ person() { console.log('function')}
person = "variable";
console.log(person);//variable

// 假设函数声明优先,实际代码如下
function person() {
    console.log('function')
}
var person;
console.log(person); //ƒ person() { console.log('function')}
console.log(person); //ƒ person() { console.log('function')}
person = "variable";
console.log(person);//variable

请各位大牛给个可以证明的例子,或者上述内容有啥不对的地方,万分感谢

阅读 2.5k
3 个回答

标准里就是这么写的呀。。。

你后面那段代码,先声明变量然后在声明函数,一开始得到的 person 是函数,反过来也是一样的,这不就说明函数声明优先级要大么。
否则,谁写在前面谁大不就是第一个是变量,第二个才是函数么。。。或者后面的优先级大。。。

变量声明提示说的就是函数一开始的时候变量默认的值呀,在函数执行过程中肯定可以给函数赋其他值

http://zonxin.github.io/post/...

console.log(a) // undefined
var a = 1
console.log(a) // 1

把这个列子和第一个例子对比,就可以看出优先顺序了。
如果变量声明的优先级大于函数声明,那么你第一个例子的第一个打印值,应该是undefined,而不是函数引用。
例如是下面这种情况。

console.log(person); //undefined
function person() {
    console.log('function')
}
console.log(person); //ƒ person() { console.log('function')}
var person = "variable";
console.log(person);//variable

函数声明提升优先,后面的变量声明都会被忽略,标准就这么写。。。
如果变量声明优先,再声明函数的话理应报错的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题