javascript中的变量作用域
JavaScript变量 作用域
2023-09-11 14:20:12 时间
在网上看了一道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'.
相关文章
- [译] 沙箱中的间谍 - 可行的 JavaScript 高速缓存区攻击
- JavaScript核心功能之模块的应用
- (转)ASP.NET调用javascript脚本的方法总结
- Jsp页面里引入一个javascript文件,在jsp的onclick里怎么添加脚本文件里的方法
- [Javascript] Hide Properties from Showing Up in "for ... in" Loops in JavaScript
- [Javascript] An Introduction to JSPM (JavaScript Package Manager)
- javascript变量:全局?还是局部?这个得注意
- Javascript自由拖拽类
- [Javascript] Linting JavaScript with ESLint
- 了解Javascript 变量
- javascript:得到变量类型的方法(chrome 105.0.5195.125)
- 如何在JavaScript中循环遍历JSON响应?
- JavaScript 函数 window.matchMedia 的用途
- JavaScript变量不同作用域的测试
- JavaScript and Ruby in ABAP
- JavaScript基础语法(变量)
- javascript的对象 和 JSON 对象?
- JavaScript字符串排序localeCompare()笔记
- JavaScript基础(一)js环境搭建、变量常量、数据类型及转换、运算符
- web前端框架Javascript开发基础之JavaScript作用域