zoukankan      html  css  js  c++  java
  • 【javascript基础】JavaScript 中 undefined 与 undeclared 之间的区别?

    我认为这个根本的区别在于,undefined是Js语言类型,而undeclared却是一种Js语法错误吧。

    --------------------------------- 解答第一部分---------------------------------------

    在Js中,有两个表示‘空’的值undefined和null,其中比较有用的是 undefined。undefined 是一个值为 undefined 的类型。JavaScript语言也定义了一个全局变量,它的值是 undefined,这个变量也被称为undefined。 但是这个变量不是一个常量,也不是一个关键字。这意味着它的值可以轻易被覆盖。为了避免可能对 undefined 值的改变,一个常用的技巧是使用一个传递到匿名包装器的额外参数。在调用时,这个参数不会获取任何值。如下例子:

    var undefined = 123;
    (function(something, foo, undefined) {
    // 局部作用域里的 undefined 变量重新获得了 `undefined` 值

    })('Hello World', 42);


    更好的例子是在早期的jQuery代码中(1.5版本前的jQuery中),你会发现第一行直接就是function(window, document, undefined)这样直接调用的。很多人不明白这里整个未定义的undefined变量有何用,其实这里的undefined就是这样来的。

    该部分答案参考自 Javascript Garden: bonsaiden.github.com/JavaScri...(写得很好的Js怪癖教程,建议大家去看看!)

    ------------------------------解答第二部分---------------------------------

    而undeclared则是一种语法错误,@孙大同 同学的答案,其实访问undeclared的变量并非会中断浏览器执行。在浏览器运行上下文中,undeclared出来的变量简单可以认为是没有这样 var a这样定义变量,Js引擎执行的时候,由于无法找到其对应的上下文(scope),会简单地认为该变量是全局的变量,就是会把该变量定义到window中 去!

    很多同学在写for (var i = 0, L = xx.length; i < L; i++) 这样的语句的时候,忘记写var是经常性的(包括我......),所以直接导致变量i和L变为全局变量,然后出错。不过,虽然出错,但变量i和L是可以 访问滴~~~  

    参考 @zhiyelee 同学的更新,加入到这个答案里面:需要说明一点的是 变量没有使用var 显示声明,但是在使用前已经赋值,这个值是被隐性声明未全局变量。

    即使是b = “null" 这样的代码,是可以使用window.b访问到,而且不会打断浏览器执行!

    具体的证据在Mozilla的MDC社区文档中,参考链接 [url]https://developer.mozilla.org/en/JavaSc...[/url] 里面有详细关于Var关键字导致的变量undeclared情况。
  • 相关阅读:
    Jmeter+ant+jenkin接口自动化发邮件
    BadBoy 参数化录制,并导入JMeter
    Jmeter 移动端录制
    Pytest 操作
    Pytest框架简介与安装
    Fiddler iOS抓包
    Fiddler Android APP 抓包
    random的使用
    scanner的使用与匿名对象的使用
    标准的类,API的初步使用
  • 原文地址:https://www.cnblogs.com/sniper007/p/2746335.html
Copyright © 2011-2022 走看看