理解作用域

四月份了,天气逐渐暖和些,可是昨天突然下起了暴雨,早上来到工作室,鞋湿透了,衣服湿了,书包下面也完全湿透,导致电脑进了点水幸好可以正常使用,只不过书也湿了,让我很是心痛。。。。但我真的是打着伞过来,只怪大连的风从四面八方袭来!!让我无从下手~

可是,可是......这样的结局竟然来自一场人工降雨。。。

虽是大雨天,但也需要看书,今天让我们来理解一下作用域吧!

二话不说,先上代码。

1.全局作用域

var global = "global";
for(var i = 0; i <8; i++) {
    var a = 10;
}
console.log(global);  //global
console.log(i);          //8
console.log(a);         //10

扫一眼感觉没什么就是这个答案呀,可是你是否还记得但年大年湖畔的c和c++么?想起来了吧!javascript是没有块级作用域的,因此对于js来说变量i和a都是全局变量,所以皆可以输出i和a的值。

那么,js里没有办法让变量成为局部变量么,当然有了!

方法1.使用立即函数

(function(){
    var part = "part";
})();

方法2.避免预编译

!function() {
    var a = 90;
}();
+function() {
    var a = 80;
}();

2.函数作用域

function func() {
    var b = 0;
}
console.log(b);    //b is not defined

函数作用域,只在函数内部有效。

好,那再来一个

function func() {
    num =  12;
}
alert(num);  //12

由于没有用var声明变量,会默认为是全局变量,因此可以访问到。

3.eval()作用域

由于不太用,目前还不是很了解,会后续添上的。。。。

最后,再来说一下作用域链

var color = "red";
function getColor() {
    return color;
}
alert(getColor());  //red

当调用getColor()时,返回变量color,首先会搜索getColor()变量的对象,若没有就去搜索getColor()上一级是否有color变量,就这样一级一级向上找(到全局变量停止)直到找到最近的color变量返回其值,这形成了一条作用域链。下图展示搜索过程:

时间: 2024-10-29 19:10:27

理解作用域的相关文章

深入理解作用域链

作用域链是JavaScript中的一个非常重要的概念,想要理解什么是作用域链,就必须知道什么是作用域. 作用域: 1.全局作用域: (1)最外层函数和在最外层函数定义的变量,拥有全局的作用域.js中一切皆对象,函数也是对象,js最外层的对象是window.所以在window下定义的函数和未被这些函数包裹的变量,就拥有全局作用域,这些变量能够在其他任何作用域下使用. (2)所有window对象下的内置属性属于全局变量:如window.document,window.navigator等. (3)没

js基础梳理-如何理解作用域和作用域链?

本文重点是要梳理执行上下文的生命周期中的建立作用域链,在此之前,先回顾下关于作用域的一些知识. 1.什么是作用域(scope)? 在<JavaScritp高级程序设计>中并没有找到确切的关于作用域的定义,只是在"4.2执行环境及作用域"中简单说了下执行环境(execution context)的概念.而执行环境其实就是之前博客:js基础梳理-究竟什么是执行上下文栈(执行栈),执行上下文(可执行代码)?中的执行上下文. 而在<JavaScript权威指南>中,对作

指令的理解-作用域范围

最近学习了一下angularjs的指令作用域scope的属性,掌握了指令 你就掌握了angularjs核心,一般我们在书写一个指令的时候,如果不写scope,默认的是指令和Controller之间可以互相访问通信,这个是最简单的,也是最危险的,因为虽然在编程上方便了,但是指令的 某些属性很容易被外部修改,因为指令一般是需要在多个地方复用的,所以为了保证写出可以高效封闭重复利用率高的指令必须要用到scope: scope:false (指令的作用域继承父级作用域[parent]的,指令和Contr

理解Ruby中的作用域

作用域对于Ruby以及其它编程语言都是一个需要理解的至关重要的基础知识.在我刚开始学习ruby的时候遇到很多诸如变量未定义.变量没有正确赋值之类的问题,归根结底是因为自己对于ruby作用域的了解不够,但在你看看完我的这篇文章后,相信你不会再担心会遇到这些头疼的问题. 什么是作用域? 当谈论到作用域的时候,应该马上想到变量和可见性这两个词,变量和可见性是作用域的主要内容,没错,作用域就是关于在代码的什么地方什么变量是可见的,当你充分了解了作用域后,给你一段代码,你可以轻易知道此时什么变量是可见的,

深入理解javascript作用域系列第一篇——内部原理

× 目录 [1]编译 [2]执行 [3]查询[4]嵌套[5]异常[6]原理 前面的话 javascript拥有一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域.作用域貌似简单,实则复杂,由于作用域与this机制非常容易混淆,使得理解作用域的原理更为重要.本文是深入理解javascript作用域系列的第一篇——内部原理 内部原理分成编译.执行.查询.嵌套和异常五个部分进行介绍,最后以一个实例过程对原理进行完整说明 编译 以var a = 2;为例,说明javasc

js闭包,原型,作用域等再一次理解

要理解闭包,原型等,首先要理解作用域 作用域:就是函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在最前面,把自身的父级函数中的变量放在其次,把再高一级函数中的变量放在更后面,以此类推直至全局对象为止. 回收机制:一个函数在执行开始的时候,会给其中定义的变量划分内存空间保存,以备后面的语句所用,等到函数执行完毕返回了,这些变量就被认为是无用的了,对应的内存空间也就被回收了,下次再执行此函数的时候,所有的变量又回到最初的状态,重新赋值使用,但是如

理解 JavaScript 作用域(转)

简介 JavaScript 有个特性称为作用域.尽管对于很多开发新手来说,作用域的概念不容易理解,我会尽可能地从最简单的角度向你解释它们.理解作用域能让你编写更优雅.错误更少的代码,并能帮助你实现强大的设计模式. 什么是作用域? 作用域是你的代码在运行时,各个变量.函数和对象的可访问性.换句话说,作用域决定了你的代码里的变量和其他资源在各个区域中的可见性. 为什么需要作用域?最小访问原则 那么,限制变量的可见性,不允许你代码中所有的东西在任意地方都可用的好处是什么?其中一个优势,是作用域为你的代

谈谈自己对js闭包,执行上下文,作用域链,活动对象AO,变量对象VO的理解

引子:关于闭包什么是闭包呢?  从定义上来看,所有的函数都可以是闭包.当一个函数在调用时,引用了不是自己作用域内定义的变量(通常称其为自由变量),则形成了闭包:闭包是代码块和创建该代码块的上下文中数据的结合. 例子:   function mytest( ){                                var test=10;          return function( ){                  test++;               alert(t

理解js中的作用域以及初探闭包

前言 对于js中的闭包,无论是老司机还是小白,我想,见得不能再多了,然而有时三言两语却很难说得明白,反正在我初学时是这样的,脑子里虽有概念,但是却道不出个所以然来,在面试中经常会被用来吊自己的胃口,考察基础,虽然网上自己也看过不少相关闭包的文章,帖子,但貌似这玩意,越看越复杂,满满逼格高,生涉难懂的专业词汇常常把自己带到沟里去了,越看越迷糊,其实终归结底,用杨绛先生的一句话就是:"你的问题在于代码写得太少,书读得不够多",其实在我看来前者是主要的,是后者的检验, 自知目标搬砖20年(还