JS - 关于改变Javascript的作用域链
来源:互联网 发布:文字作图软件 编辑:程序博客网 时间:2024/05/18 18:15
关于Javascript静态作用域的一些心得。
之前在看JS大牛BYVoid的<<NodeJS开发指南一书>>时, 学习到了最能说明Javascript静态作用域特性的代码, 如下:
var scope = "global";function f1() { console.log(scope);}f1() // output: globalfunction f2() { scope = "f2" f1();}f2(); // output: global
第一次输出“global”,
是因为f1()函数找到父级执行作用域下(全局作用域)有定义全局变量scope = “global“。
第二次输出”global“,
因为JS静态作用域链的特性使得作用域链是在函数定义时候被决定的,而不是在调用时候被决定的。
所以在f2()函数中执行f1()函数的时候,f1()函数的父级作用域仍然是全局作用域,所以依然会输出“global”。
那如何在不改变f1函数的结构和定义的情况下,使得在f2函数中输出的scope的变量的值可以是“f2”呢
使用with。
var scope = "global";function f1() { console.log(scope);}f1() // output: globalfunction f2() { scope = "f2" with(scope) { f1(); }}f2(); // output: f2with会改变其范围内的作用域链。
这里with把在其范围内的f1()函数的执行作用域链的父级作用域更改为了自己,
所以在执行f1()函数时,找到父级作用域链中scope定义为“f2”,
因此加入with后,第二次可以输出“f2”。
0 0
- JS - 关于改变Javascript的作用域链
- 关于Javascript 的作用域
- JavaScript 关于作用域链
- 【js】javascript作用域
- js中会改变作用域的两个语句
- 关于JavaScript的作用域链的一点小总结
- 关于javascript作用域
- 关于javaScript作用域
- 关于JavaScript作用域的练习题
- 关于javascript的块级作用域
- 一个关于JS作用域链的例子
- [js点滴]JavaScript中的作用域及作用域链的意义和解释
- js中可以改变作用域的三中方式(改变this)
- JS基础--with改变作用域
- JavaScript关于作用域、作用域链和闭包的理解
- 关于JS变量的作用域,作用域链与闭包
- 关于js中的作用域和作用域链以及常见的问题和结果方法
- JavaScript的作用域链
- 可变参数的add函数的实现: int add(int argc, ...){}
- Vector如何释放内存呢?
- 再开一篇关于C++程序设计基核心之一:引用,指针,符号优先级,函数参数传递
- 虚拟机
- 2015061809 - 警醒
- JS - 关于改变Javascript的作用域链
- 关于C++程序设计的基础核心之二:继承与派生的基本知识
- Linux网络编程入门 (转载)
- 内存管理笔记(分页,分段,逻辑地址,物理地址与地址转换方式)
- 关于cmd命令行关闭电脑
- (windows下)php-ini文件和开启gd库支持
- Android ListView Adapter notifyDataSetChanged 刷新没有效果
- 目前的几种应用防杀方式
- Javascript 严格模式详解