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情况。
  • 相关阅读:
    对scott中emp表进行各种操作
    可兼容的事件绑定方法
    深度复制
    原型链的继承
    如何在github上发布自己的项目
    用单例连接oracle数据库
    Struts2之输入验证
    JSP之监听器Listener(二)
    JSP之监听器Listener(一)————————ServletContextListener
    JSP之过滤器Filter
  • 原文地址:https://www.cnblogs.com/sniper007/p/2746335.html
Copyright © 2011-2022 走看看