先来看一个列子:
<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';
分享到:
相关推荐
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。任何程序...
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 ...
JavaScript 作用域 和作用域链作用域作用域链 作用域 作用域就是变量与函数的可访问范围,作用域控制着变量与函数的可见性和生命周期。换句话说,作用域决定了代码区块中变量和其他资源的可见性。 function fun() { ...
目录 JS三座大山同步异步同步异步区别作用域、闭包函数作用域链块作用域闭包闭包解决用var导致下标错误的问题投票机闭包两个面试题原型、原型链原型对象原型链完整原型链图 JS三座大山 同步异步同步异步区别...
作用域链图解
因此,在本文中,我将会向大家解释清楚什么是作用域和作用域链,以及Javascript引擎在内部是如何通过它们操作和查找变量的。 事不宜迟,正文开始 :slightly_smiling_face: 什么是作用域 Javascript中的作用域说的是...
虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! 作用域(Scope) 1. 什么是作用域 作用域是在运行时代码中的某些特定部分中...
前端面试题,包含JavaScript的闭包,作用域,原型,原型链,上下文环境以及DOM,BOM封装函数深度克隆,以及一些常见的·JS问题,试题简单但是容易混淆,作为前端工程师必考题
说起变量第一个要说到的肯定就是作用域,正是因为不熟悉JS的作用域,往往就会把面向对象的作用域张冠李戴,毕竟有些东西总是习惯性的这样,但是并不是每次照搬都是可以的,那么下一个问题就来了,js到底是什么作用域,...
先来一段简单的javascript代码: ...1.javascript引擎会在页面加载脚本被执行时为每个函数创建一个作用域(执行上下文)及作用域链。 2.javascript引擎在产生这些作用域后,会创建一个堆栈。 3.将onload对应的
每种编程语言,其变量都有一定的有效范围,超过这个范围之后,变量就失效了,这就是变量的作用域。从数学的角度来看,就是自变量的域...采用静态作用域的语言中,基本都是最内嵌套作用域规则:由一个声明引进的标识符在
javascript作用域链(Scope Chain)初探.docx
1. 在JS中使用的是词法作用域(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在函数内声明的变量具有函数作用域(function scope),属于局部变量 局部变量...
JavaScript中出现了一个以前没学过的概念——闭包。何为闭包?从表面理解即封闭的包,与作用域有关。所以,说闭包以前先说说作用域
每个javascript执行环境都有一个和它关联在一起的作用域链(scope chain).这个作用域链是一个对象列表或对象链。当javascript需要查询变量x的值时,它就开始查看该链的第一个对象。如果那个对象有一个叫x的属性,那么...
在ES6之前,javascript...在了解作用域链之前,我们先了解一个执行期上下文的概念。 执行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象(即AO或GO),一个执行期上下文定义了一个函数的执行环境,函数
i++) {// 块级作用域}作用域每次执行都会生成一个新的活动对象作用域内的所有变量自动成为活动对象中的属性只有在作用域执行时才解析活动对象内的属性值作用域每
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 ...
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 一、...