`
myfreespace
  • 浏览: 228998 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js中作用域链的问题

 
阅读更多

先来看一个列子:

 

<script type="text/javascript">
/*
 * js函数是一个对象,scope是仅供js引擎访问的内部属性,包括创建对象属性的集合
 * 当一个函数创建后它的作用域链被填充,
 * 每个内部对象是独一的,所以多次调用一个函数会导致多次创建
 * 当函数运行过程中遇到一个变量要搜索作用域,
 */ 
var tt = 'aa';
function test() {
	alert(tt);
	var tt = 'bb';
	alert (tt);

}
test();
</script>

 看这段代码第一个alert(tt)弹出的是undefined 第二个弹出的是 'bb',而外面定义的'aa'那?我们都知道js中的定义用var来声明,外面的'aa'为全局变量,按照js的顺序执行过程第一个alert应该弹出'aa'.但实际弹出的是'undefined',这是为什么那?

这就是js的作用域对象起的作用,当每个函数在调用的时候都会生成一个独立的域对象,也就是运行时上下文,这个域对象包括了两部分,第一部分是函数自身声明的对象,另一部分是js对象自身的属性,在函数执行过程中当遇到一个变量的时候,查找的顺序也是从前端想后深入查找,当查找不到的时候就返回'undefined'。而这个地方外面定义的'aa'在第一场alert()的时候为什么没有被找到,这是因为在函数里面有定义了var tt = 'bb',这样在在作用域那他的优先级比较高,而在第一次调用的时候tt = 'bb'没有被定义,所以第一次alert()会弹出 'undefined'.

我们在写js的时候尽量减少变量搜索的深度,多用局部变量代替全局变量,或是声明一个全局变量对象,把用到的变量都看作对象的一个属性来访问。

 

 var myParameter = {
       aa : '123',
       bb : 'dfdf'
}

myParameter.cc = 'nihao';
0
4
分享到:
评论

相关推荐

    JavaScript中作用域链的概念及用途讲解

    了解并熟练掌握作用域链,对于编写高效、无错的JavaScript代码至关重要,同时也能帮助开发者在面试中脱颖而出,解决实际开发中的调试问题。通过深入理解作用域链,我们可以更好地管理变量的生命周期,防止不必要的...

    深入理解JavaScript作用域和作用域链

    JavaScript作用域是编程中至关重要的概念,它规定了变量和函数的可见性及生命周期。JavaScript主要有两种作用域:全局作用域和局部作用域。 全局作用域是指在代码的任何位置都可以访问的变量或函数,这通常包括在最...

    javascript变量作用域

    JavaScript 变量作用域是基于其特有的作用域链的。在 JavaScript 中,变量作用域是指变量可以被访问和修改的范围。 JavaScript 没有块级作用域,而是基于函数作用域和全局作用域的。 首先,看看 JavaScript 的作用...

    深入了解JavaScript,优化作用域链(2).pdf

    这是因为局部变量存在于执行上下文的作用域链中的较浅位置,而全局变量总是存在于作用域链的最末端。每次访问全局变量时,JavaScript引擎都需要遍历整个作用域链,直到全局对象,这无疑增加了查找时间。因此,在编程...

    js作用域链图解ppt

    JavaScript中的作用域链是理解变量查找和闭包的关键概念。作用域链主要涉及到函数执行上下文和全局执行上下文中的作用域。以下是对这个主题的详细解释: 首先,每个函数在创建时,都会有一个内部属性[[scope]],它...

    javascript 闭包、匿名函数、作用域链

    JavaScript中的闭包、匿名函数和作用域链是编程中至关重要的概念,它们是理解JavaScript运行机制的关键。在本文中,我们将深入探讨这三个概念,并通过实际示例来展示它们的运用。 首先,我们来讨论“闭包”。闭包是...

    理解JavaScript作用域和作用域链

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。任何程序...

    javascript作用域链(Scope Chain)初探.docx

    ### JavaScript作用域链(Scope Chain)初探 #### 一、引言 JavaScript的作用域链是一个重要的概念,尤其是在深入理解JavaScript执行机制时不可或缺的一部分。本文将通过对几个具体例子的分析来探讨JavaScript作用域...

    JavaScript 作用域 和作用域链

    当尝试访问一个变量时,JavaScript引擎会首先在当前作用域中查找,如果找不到,就会沿着作用域链向上层作用域查找,直到找到变量或者到达全局作用域。如果在全局作用域仍找不到,那么就会引发错误。 以提供的代码为...

    JavaScript — 原型链与作用域链1

    JavaScript 是一种广泛应用于Web开发的动态编程语言,其核心特性之一就是原型链和作用域链。这两个概念是理解和掌握JavaScript高级特性的基础。 首先,我们来深入探讨一下**作用域链**。作用域决定了变量在何处可以...

    javascript执行环境,作用域理解

    整个作用域链是由不同执行位置上的 Variable Object 按照规则所构建一个链表。作用域链的最前端,始终是当前正在执行的代码所在环境的 Variable Object。如果这个环境是函数(比如 Fn2),则将其活动对象...

    JavaScript中的作用域链和闭包

    **作用域链**是JavaScript中用于决定变量访问的一个机制。每个函数在创建时,都会形成一个作用域链,这个链由当前函数的作用域(包含局部变量)和所有父级作用域(直至全局作用域)组成。作用域链确保了函数能够访问...

    图解javascript作用域链

    在JavaScript中,每个函数都有自己的作用域,而这些作用域按照特定的顺序组织起来,形成了作用域链。这个链帮助解析器在不同层级的上下文中找到变量。 在提供的代码示例中,我们有一个`window.onload`事件处理器,...

    深入了解JavaScript,从作用域链开始(1).pdf

    总的来说,深入理解JavaScript的作用域和作用域链对于编写高效、无bug的代码至关重要。通过掌握这些基本概念,开发者可以更好地管理变量和函数的生命周期,避免全局变量的滥用,并有效地组织代码逻辑。

    10-作用域链和闭包:代码中出现相同的变量,JavaScript引擎是如何选择的?_For_vip_user_0011

    "作用域链和闭包:代码中出现相同的变量,JavaScript引擎是如何选择的?" 标题“作用域链和闭包:代码中出现相同的变量,JavaScript引擎是如何选择的?”中,我们可以看到JavaScript引擎是如何选择相同的变量的。...

    深入理解变量作用域

    - 在JavaScript中,每个执行上下文都有一个与之相关联的作用域链。作用域链是一个对象列表,用于存储变量和函数声明。 - 当JavaScript引擎需要查找变量时,它会从当前作用域开始,沿着作用域链向上查找,直到找到...

    05-JavaScript作用域.pdf

    JavaScript作用域是指在JavaScript代码中,变量、常量、对象和函数能够访问的...在开发中,应根据需求合理使用全局作用域、局部作用域、块作用域和函数作用域,并注意作用域链的查找机制,避免不必要的错误和性能问题。

Global site tag (gtag.js) - Google Analytics