声明提前和函数声明/变量声明权重

ゞ 浴缸里的玫瑰 2022-01-21 12:01 1383阅读 0赞

1.同名的变量声明,JavaScript采用的是忽略原则,后声明的会被忽略,变量声明和赋值操作只有声明会被提前,默认为undefined。

  1. console.log(a);
  2. var a = 1;
  3. console.log(a);
  4. var a = 2;
  5. undefined
  6. 1

2.同名的函数声明JavaScript采用的是覆盖原则,后声明的会覆盖前面的。

  1. console.log(a())
  2. function a(){console.log(1)};
  3. function a(){console.log(2)};
  4. 2

3.同名的函数声明和变量声明,函数声明会提升到变量声明之前,且赋值之后,不再指向函数。

  1. console.log(a);
  2. var a = 1;
  3. console.log(a);
  4. function a(){console.log(1)};
  5. console.log(a);
  6. ƒ a(){console.log(1)}
  7. 1
  8. 1

通过上面的说明,我们来看一道题:

参考文章:https://www.cnblogs.com/bugda/p/6036282.html

  1. var a=100;
  2. function a(){
  3.   console.log(a);
  4. }
  5. a();

这个串代码执行完会报错 : a is not a function

上面的代码等同于 :

  1. var a=function (){
  2.   console.log(a);
  3. }
  4. var a=100;
  5. a();

相当于给a重新赋值了,所以会报错.

再看一个例子:

  1. 第二个难题是处理重载函数标识符的问题。
  2. console.log('---------------------重载函数标识符--------------------');
  3. //fun指向一个函数
  4. if (typeof fun === 'function') {
  5. console.log('We access the function.');
  6. }
  7. //定义变量fun并赋值为数字3
  8. var fun = 3;
  9. //fun指向一个数字
  10. if (typeof fun === 'number') {
  11. console.log('Now we access the number.');
  12. }
  13. //函数声明
  14. function fun() {}
  15. //fun仍然指向数字
  16. if (typeof fun === 'number') {
  17. console.log('Still a number.');
  18. }

输出结果:

在这里插入图片描述

更多可以参考文章:
https://blog.csdn.net/u014465934/article/details/88934610
https://blog.csdn.net/u014465934/article/details/83986685

https://segmentfault.com/a/1190000014831240
https://www.cnblogs.com/isaboy/p/javascript_function.html

https://blog.csdn.net/zhangying1994/article/details/85267091

发表评论

表情:
评论列表 (有 0 条评论,1383人围观)

还没有评论,来说两句吧...

相关阅读