zoukankan      html  css  js  c++  java
  • javascript中的变量作用域

    在网上看了一道js面试题

    <script type="text/javascript">
    
    var tt = 'aa';
    function test() {
    	alert(tt);
    	var tt = 'bb';
    	alert (tt);
    
    }
    test();
    </script>


    运行结果: 第一个alert(tt)弹出的是undefined 第二个弹出的是 'bb'

    why:

    权威指南说:Javascript中的函数“在定义它们的作用域里运行,而不是在执行它们的作用域里运行”

    函数在调用的时候都会产生一个独立的作用域对象,也就是运行时上下文,这个域对象包括了两部分,第一部分是函数自身声明的对象,另一部分是js对象自身的属性,在函数执行过程中当遇到一个变量的时候,查找的顺序也是从前端向后深入查找,当查找不到的时候就返回'undefined'。


    而外面定义的'aa'在第一次alert()的时候为什么没有找到?

    调用对象位于作用域链的前端,局部变量(在函数内部用var声明的变量)、函数参数及Arguments对象都在函数内的作用域中——这意味着它们隐藏了作用域链更上层的任何同名的属性。也就是说,在程序中,test函数内部的“var tt='bb'”将会致使“var tt='aa'”在test函数被调用时完全被隐藏。

    在定义test函数时,当定义第一个alert(tt)时,这里会记录tt是作用域链中的一个变量但不会记录tt的值,函数定义完毕后tt就添加到作用域里,所以第一个alert语句能够找到该作用域里的tt,但没有值,所以第一次会弹出 'undefined'.


  • 相关阅读:
    C#中 时间戳与普通时间格式的转换
    关于Litjson的简单使用
    Unity 前端开发积累 第二篇
    《大话数据结构》--- 第六章 树
    《大话数据结构》--- 第五章 串
    获取RDP连接中密码的方法
    CMD打包文件,解压文件
    泛微OA7.0下载7.1下载
    [ASP.NET]书店后台开发-模板页
    [JSP]用户注册
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3465098.html
Copyright © 2011-2022 走看看