• 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'.


  • 相关阅读:
    jquery height
    正则表达式的一点奇怪
    this和call
    ajax views
    史上变态的模块
    在php中有什么用
    localhost访问不了
    $.extend abc
    $.extend
    和人沟通的一个要点
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3465098.html
Copyright © 2020-2023  润新知