画作用域链的原则

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

    <script type="text/javascript">
        // 绘制以下代码的作用域链:
        var num = 123;
        var f = function() {};
        var arr = [];

        // 绘制作用域的规则:
        // 1 绘制作用域链的时候,只绘制在当前作用域中声明的变量或者函数
        // 2 把全局作用域看作是0级别链,只绘制在全局中声明的函数和变量
        // 3 如果是在全局作用域中存在一个函数,此时,在这个函数上
        //         引出一条新的链,此时把这条链叫做: 1级别链
        // 4 如果,在函数内部 又声明链一个函数,然后,这个函数由引出一条新的
        //         链出来,把这条链称作:2级别链
        // 5 以此类推,只到n级别的链

        // 变量搜索原则:
        // 从高级别的链 到 低级别的链,来查找
        // 1 首先是在当前链(n)中查找有没有声明的这个变量,如果由直接使用
        // 2 没有,就去 n-1 级别的链中查找有没有,如果由直接使用
        // 3 以此类推,知道 0 级别的链,如果有直接使用,如果没有
        //         如果是赋值,此时会创建全局变量
        //         如果是读取,此时会报错!!
        // console.log(asdfa);
    </script>
</body>
</html>
时间: 2024-09-29 01:09:00

画作用域链的原则的相关文章

javascript函数作用域链 词法作用域

在开发语言中常见的作用域规则有  块级作用域和词法作用域 作用域 顾名思义就是起作用的区域  定义一变量后 ,可以在此范围作用的区域 一.块级作用域就是用一个块结构分割变量的访问区域  块即{ } 代表语言有C 系列语言 二.词法作用域就是变量的作用范围,在书写代码时就已经决定作用的范围,与运行时无关 特点:分割作用域只有函数 变量名提升 函数名提升 函数的声明比变量的声明优先级高 function a(){ } var a; alert(a);//打印出a的函数体 var a; functio

JavaScript中作用域链和闭包

一.匿名函数 1.1 匿名函数的概念 ? 声明一个没有函数名的函数,就是匿名函数. ? 有函数名的函数就是具名函数. 看下面的代码: <script type="text/javascript"> /* //这里定义了一个函数,而且没有函数名.这样写语法是错误的,如果允许这样定义,那么根本就没有办法调用. //所以,我们可以用一个变量来存储一下 function(){ } */ // 声明了一个匿名函数,并把匿名函数赋值给变量f. 注意这个时候这个匿名函数并没有执行. va

(第四天)作用域链、闭包

前言 JavaScript是基于词法作用域的语言:通过阅读包含变量定义在内的数行源码就能知道变量的作用域.全局变量在程序中始终都是有定义的.局部变量在声明它的函数体内以及其所嵌套的函数内始终是有定义的. 如果将一个局部变量看做是自定义实现的对象的属性的话,那么可以换个角度来解读变量作用域.每一段JavaScript代码(全局代码或函数)都有一个与之关联的作用域链(scope chain).这个作用域链是一个对象列表或者链表,这组对象定义了这段代码“作用域中”的变量.当JavaScript需要查找

Js 作用域与作用域链与执行上下文不得不说的故事 ?(? ???ω??? ?)?

最近在研究Js,发现自己对作用域,作用域链,活动对象这几个概念,理解得不是很清楚,所以拜读了@田小计划大神的博客与其他文章,受益匪浅,写这篇随笔算是自己的读书笔记吧~. 作用域 首先明确一个概念,js只有函数作用域(function-based),没有块级作用域,也就是只有函数会有自己的作用域,其他都没有. 接着,作用域分为全局作用域与局部作用域. 全局作用域中的对象可以在代码的任何地方访问,一般来说,下面情况的对象会在全局作用域中: 最外层函数和在最外层函数外面定义的变量 没有通过关键字"va

(转载)Javascript 进阶 作用域 作用域链

载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25076713 一直觉得Js很强大,由于长期不写js代码,最近刚好温故温故. 1.Javascript没有代码块作用域的概念,局部作用域是针对函数来说的. [javascript] view plaincopy function fun() { for( var i = 0 ; i < 10 ; i++) {} //如果在Java中i此时应当属于未声明的变量,但是Js中i的作用域依

javascript作用域链理解

执行上下文(Execution context,简称EC) 概念 每当控制器到达ECMAScript可执行代码的时候,就进入了一个执行上下文. javascript中,EC分为三种: 全局级别的代码(全局执行上下文) 函数级别的代码(函数执行性上下文) Eval的代码(eval执行上下文) 执行上下文对象包括三个关键属性,可能有其他自定义属性. VO(Variable object), 变量对象 或者 AO(activation object),活动对象,是个字典,包括函数arguments对象

Javascript 进阶 作用域 作用域链

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25076713 一直觉得Js很强大,由于长期不写js代码,最近刚好温故温故. 1.Javascript没有代码块作用域的概念,局部作用域是针对函数来说的. function fun() { for( var i = 0 ; i < 10 ; i++) {} //如果在Java中i此时应当属于未声明的变量,但是Js中i的作用域依然存在 console.log(i);//10 if(

你从未见过如此详细的“闭包和作用域链”

0.前言 前两天,现有朋友问我,他现在看闭包,根本不明白闭包到底是怎么回事,完全不理解,这是为什么? 出于对这个问题的考量,自己回去查阅了大量的资料,通过整理和自己添加内容,于是就有了这篇文章. 本文适合人群: 新手小白 一定JS程度的同学 闲着过来凑热闹的 好吧,最后一个是卖萌,= ̄ω ̄=,废话不多说了,正文开始. 1. 对象 要理解闭包,首先要先知道闭包的基本原理是什么. 说白了,最常见的闭包就是一个函数嵌套另外一个函数,然后通过突破作用域链,来将函数内部的变量和方法传递到外面. 纳尼,我们

标识符解析、作用域链、运行期上下文、原型链、闭包

本文讲到的是如何从数据访问层面上提高JS 代码的执行效率.总的来讲有以下几条原则: 函数中读写局部变量总是最快的,而全局变量的读取则是最慢的: 尽可能地少用with 语句,因为它会增加with 语句以外的数据的访问代价: 闭包尽管强大,但不可滥用,否则会影响到执行速度以及内存: 嵌套的对象成员会明显影响性能,尽量少用: 避免多次访问对象成员或函数中的全局变量,尽量将它们赋值给局部变量以缓存. 这么几句话看似简单,但要深刻理解其中的道理则需涉及到JS的 标识符解析.作用域链.运行期上下文(又称为执