https://blog.csdn.net/sheldon178/article/details/48298151/

undefined和is not defined,字面意思看来没什么两样,不都是未定义吗?

在JavaScript中,可并非如此。

undefined定义如下:

undefined是javascript的一种基本数据类型,变量未赋值或者函数没有返回值时返回。

xx is not defined:

xxx is not defined是一种错误类型,其完整形式是:Uncaught ReferenceError: xxx is not defined(未捕获的引用错误),对象表明一个不存在的变量被引用,即:当你尝试引用一个未被定义的变量时,将会抛出一个 ReferenceError 。

由此可见:undefined和is not defined的本质区别在于:变量是否被定义。

接下来举个栗子把作用域和变量定义及未被定义说道说道。

涉及:局部变量,全局变量,作用域

前两天加了一个群,群主分享了一道小测试,恰巧让我有机会重新思考文章开头提到的问题。

打印结果依次为:undefined-----30-----b is not defined

先分析c:30

ES5中,作用域分为全局作用域和函数作用域,c君未声明,直接赋值,即赋予了其全局光环,所以即使它囿于函数fn

范围内,但是依然可以跳脱出函数作用域的禁锢,自由活动,无论在哪都可打印出c君的值;

一句话:没有用var声明的就是全局变量,即便在函数内部!
但如果有var声明的话,根据位置是否在函数内部判断到底是全局还是局部变量!

分析b:b is not defined

fn函数的作用域内,b作为局部变量,b君既被声明又被赋值,所以唯有在调用fn函数即 fn()后,b君才能彰显其价值,打印出值来

但b君相当委屈,虽然要啥有啥,但是圈禁在函数作用域内,所以作用域外部打印b时,是无法在全局作用域的范围内寻找到b君的踪影的,只有在函数作用域内console.log(b)才能看到b的值;

在全局作用域内,b君连声明都没有,我上哪找你去?所以只能Uncaught ReferenceError: b is not defined.

捕获不到你啊!

所以如果console.log(b)是在大括号{}内部,b就是20了,而不是is not defined了。

只有在function内部新声明的才是局部变量。

分析a:undefined

这里有个迷惑项,判断语句的大括号内部{}是个作用域吗?答:当然不是啦!

只有在function内部新声明的才是局部变量,在if、while,for里面声明的变量统统都是全局变量!

所以,a君其实是个全局变量,在解析过程中,先将a变量提升:var a;

然后进入判断语句,因为判断条件是false,所以无法进入判断语句内部,那么a无法被赋值,所以,打印a为undifined;

如果,把判断条件!f 改为f,即为true,那么console.log(a),打印的就是10啦!

所以,赋值阶段一定要和判断条件结合起来~

参考文章:https://blog.csdn.net/sheldon178/article/details/48298151/

undefined和is not defined一样吗?相关推荐

  1. undefined和is not defined区别

    undefined定义: undefined是javascript的一种基本数据类型,变量未赋值或者函数没有返回值时返回. xxx is not defined是一种错误类型,其完整形式是:Uncau ...

  2. JavaScript中undefined和is not defined异常

    不解释,直接上代码: console.log(xx); console.log(window.xx); (其中xx是一个不存在的变量) 当直接打印xx变量时,直接抛出一个is not defined异 ...

  3. Javascript的undefined和notdefined的区别

    not defined.undefined的区别 not defined一般会出现在控制台,提示错误:"xxx is not defined"表示xxxx没有被定义,是未定义的. ...

  4. JavaScript有关的10个怪癖和秘密(转)

    数据类型和定义 -------------------------------------------------------------------------------------------- ...

  5. 好程序员Java教程分享JavaScript面试问题及答案(一)

    好程序员Java教程分享JavaScript面试问题及答案(一) 1.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个 ...

  6. JavaScript有关的10个怪癖和秘密

    数据类型和定义 1. Null是个对象 JavaScript众多类型中有个Null类型,它有个唯一的值null, 即它的字面量,定义为完全没有任何意义的值.其表现得像个对象,如下检测代码: alert ...

  7. 前端必备,JavaScript面试问题及答案

    前端必备,JavaScript面试问题及答案 1.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱? 尽管 typ ...

  8. 37个JavaScript基本面试问题和解答

    1.使用typeof bar ==="object"来确定bar是否是一个对象时有什么潜在的缺陷?这个陷阱如何避免? 尽管typeof bar ==="object&qu ...

  9. 你应该知道的25道Javascript面试题

    题目来自 25 Essential JavaScript Interview Questions.闲来无事,正好切一下. 一 What is a potential pitfall with usin ...

  10. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?...

    五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...

最新文章

  1. 理解“==”和“equals()”
  2. 008_CSS属性选择器
  3. java简历达内_达内教你怎么写大牛简历
  4. 《C++ Primer》1.52节练习
  5. flask第一章:项目环境搭建
  6. python网络爬虫系列(八)——常见的反爬手段和解决方法
  7. SQLite的使用(二):数据增删改查
  8. 从企业角度看:网站设计的关键是了解与沟通
  9. 磁盘不见了只剩一个c盘_电脑硬盘分区突然见了就剩个C盘到磁盘管理看也只有C盘...
  10. SumatraPDF 适配 EPUB,MOBI
  11. matlab绘直方图,[转载]matlab中函数bar绘制直方图
  12. Spark入门(一篇就够了)
  13. C程序内存泄露检测工具——Valgrind
  14. 月考分析五年级英语html,五年级英语月考总结
  15. 快过年了用Python抢红包
  16. 计算机桌面保护时间,电脑处于屏幕保护或者休眠状态的时间怎么自己设置?
  17. python刷视频挣钱_薅羊毛--使用python+adb实现自动刷视频点赞
  18. 253Echarts - 3D 曲面(皮革材质)
  19. modbustcp测试工具怎么用_【转】年轻人不讲武德不仅白piao接口测试知识还白piao接口测试工具会员...
  20. 百度语音合成与语音识别api使用(Java版本)

热门文章

  1. 王道数据结构3.3.6——2、铁道进行车厢调度,将一辆列车的硬座车厢都调到软坐车厢后面
  2. edm java_EDM推送
  3. 1430. Crime and Punishment
  4. 在chrome浏览器上下载txt小说的Javascript代码
  5. iOS 全横屏app设置
  6. android 面包屑控件,Android —— 面包屑控件(BreadcrumbTreeView)
  7. 曲线运动与万有引力公式_万有引力的本质【2019版】
  8. YouTube-dl命令报错
  9. 计算机管理内默认共享,Win10共享默认在哪里关闭 清除默认共享哪种方法比较彻底...
  10. 基于STM32F103将采集的温度-湿度值通过串口输出,用OLED屏显示自己的学号和姓名以及显示AHT20的温度和湿度,滑动显示长字符