• 《JavaScript高级程序设计》读书笔记--执行环境及作用域


    1、执行环境

    执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象,执行环境中定义的所有变量和函数都保存在这个对象中。

    2、作用域链

    当代码在一个环境中执行时,会创建变量对象的一个作用域链

    作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象(包含了执行环境中定义的所有变量和函数)。作用域链中的下一个变量对象来自包含(外部)环境,而再下一个变量对象则来自下一个包含环境。这样,一直延续到全局执行环境。

    关于JavaScript作用域链,简单地说,即是:
    全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找,直至全局函数,这种组织形式就是作用域链。

    3、JavaScript没有块级作用域

    需要注意的一点是,JavaScript没有块级作用域

    在JavaScript中,if语句中的变量声明会将变量添加到当前执行环境。例:

    	if(true){
    		var color = "blue";
    	}
    	console.log(color);	//"blue"
    

    如果是在C、C++或Java中,color会在if语句执行完毕后被销毁。而在JavaScript中,变量color被添加到当前执行环境(全局执行环境),所以它的值能正常地被输出。

    对JavaScript来说,由for语句创建的变量i即使在for循环执行结束后,也依旧会存在于循环外部的执行环境中。例:

    	for(var i = 0; i < 10; i++){
    		dosomething(i);
    	}
    	console.log(i);	//10
    

    4、用匿名函数模仿块级作用域

    匿名函数可以用来模仿块级作用域。语法如下:

    	(function(){
    		//这里是块级作用域
    	})();
    

    以上代码定义并调用了一个匿名函数。将函数声明包含在一对圆括号中,表示它实际上是一个函数表达式。而紧随其后的另一对圆括号会立即调用这个函数。对于匿名函数在开发jQuery插件的应用可参看全屏滑动插件例子

    以上为个人见解,望指教。

  • 相关阅读:
    CUDA教程三、cuda的随机数生成
    python 使用element tree 解析 xml
    [转载] Shell正则表达式大全
    git 更新项目中子模块的版本
    git 切换到本地不存在但远端存在的分支
    vue.js3:在css中使用变量(vue@3.2.6)
    mybatis做update:动态传入要更新的字段名和字段值(mybatis 3.5.7)
    npm全局安装和非全局安装的区别(node v16.13.1 / npm 8.4.1)
    vue.js3:用mitt发送接收事件消息(vue@3.2.6 / mitt@3.0.0)
    vue3: 动态修改favicon(网站的ico 图标)(vue@3.2.26)
  • 原文地址:https://www.cnblogs.com/limengyi/p/6171472.html
Copyright © 2020-2023  润新知