JS 词法作用域 p2
关于js 还是写的简短些,利于个人理解:
先看一个例子:
var a = 2;
function fn(){
var a = 3;
console.log(a);
}
fn(a);//
说明:作用域查找会在找到第一个匹配的标识符时停止,也叫做“”遮蔽效应“”
这里很好理解,我们平时用的也很多。还有就是作用域查找只会查看一级标识符,比如foo.bar,只会查找foo,这个也很好理解。
欺骗词法:
也就是动态修改词法作用域。(不推荐,会导致性能下降)
1.eval()
可以接受字符串为参数,将内容看做是在于此处的代码,比如:
function fn(x){ eval(x) }
fn(x);
// 或者更直接
eval("alert(1)")
是的,你的窗口跳出了1.
刚开始接触的时候就因为eval被老师傅喷过,但是不明白为什么,三年前之前是这样用的,如下:
// 理解为后台传过来的json字符串
eval('{x:"123"}');// 123
用来解析对象,记不清了,好像是这样的,然后。。 就没有然后了。
为什么不好(除了性能之外),看下面这段:
var a = 2
function fn(x){
eval(x);
}
fn(" a = 3");
console.log(a);
a 变成3了,所以说是很危险的操作,想像一下,你本来定义好的变量,在页面中就被人无缘无故的改了~~~~
当前如果是严格模式情况下,就不会修改了。(把这句忘掉吧,最好不用)
除了他们new FUNCTION(..) 函数也是。
2.with
with可以重复引用同一个对象多个属性:
var b={
a:1,
b:2
}
with (o){
a = 2,
b= 3
}
再来一个例子(书里的):
function fn(o){
with(0){
o.a = 2
}
}
var o1 = {
a:3
}
var o2 = {
b:2
}
foo(o1);
console.log(01.a) //
foo(o2);
console.log(o2.a)//undefined
console.log(a)// 2 a被创建到全局作用域
另:在严格模式下,with是错误代码,被禁止~~
JS 词法作用域 p2的更多相关文章
- js词法作用域规则
function foo() {console.log( a ); // 2不是3} function bar() {var a = 3;foo();} var a = 2;bar(); js中的作用 ...
- js词法作用域
作用域链和原型链是JS中比较重要的2个概念, JS的是函数作用域,与C之类语言的块级作用域不同 JS的作用域还是词法作用域,或者叫静态作用域,作用域链是在语法解析时就完成的,而不是在执行时创建. 例子 ...
- [label][JavaScript]读nowmagic - js词法作用域、调用对象与闭包
原文链接: http://www.nowamagic.net/librarys/veda/detail/1305 作用域(scope) JavaScript 中的函数 ...
- 区分词法作用域(js)与动态作用域(精!)
在js学习中,词法作用域是必须要掌握的! 在这里,我将总结一下<你不知道的JS>一书中词法作用域的重点并分享给大家! 首先带来一段代码示例: function foo(){ console ...
- JS教程:词法作用域和闭包 (网络资源)
varclassA = function(){ ; } classA.prototype.func1 = function(){ var that = this, ; function a(){ re ...
- JS的词法作用域
词法作用域定义实现的规则: 1 函数作用域实在定义的时候决定的,而不是在执行时候决定 2 为了实现这种词法作用域,函数内部不仅包含函数代码逻辑,还必须引用当前的作用域链. 3 函数对象可以通过作用域链 ...
- 网易JS面试题与Javascript词法作用域说明
调用对象位于作用域链的前端,局部变量(在函数内部用var声明的变量).函数参数及Arguments对象都在函数内的作用域中--这意味着它们隐藏了作用域链更上层的任何同名的属性. 2010年9月14日, ...
- js 中采用词法作用域
所谓的 词法( 代码 )作用域, 就是代码在编写过程中体现出来的作用范围. 代码一旦写好, 不用执行, 作用范围就已经确定好了. 这个就是所谓词法作用域. 在 js 中词法作用域规则: 1.函数允许访 ...
- JS高级. 05 词法作用域、变量名提升、作用域链、闭包
作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123 ...
随机推荐
- python实现音乐播放器
python实现音乐播放器 模块:pygame 模块:time Python 布尔循环实例: import time import pygame muxi_k = """ ...
- django -- 美多订单分表
订单分表: 随着公司业务增长,如果每天1000多万笔订单的话,3个月将有约10亿的订单量,之前数据库采用单表的形式已经不满足于业务需求,数据库改造迫在眉睫. 解决思路: 按月分表,将原订单表拆分为 o ...
- 人工智能-机器学习之seaborn(读取xlsx文件,小提琴图)
我们不止可以读取数据库的内容,还可以读取xlsx文件的内容,这个库有在有些情况还是挺实用的 首先我们想读取这个文件的时候必须得现有个seaborn库 下载命令就是: pip install seab ...
- 简单介绍RPM包制作方法
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中.它生成具有.RPM扩展名的文件.使用r ...
- Git使用、Git配置、Git提交代码、Git上传
非教程,只是自己的一个简单笔记.建议没有入门的朋友,直接看git的官方help文档: https://help.github.com/articles/set-up-git 1.注册一个git账号,超 ...
- 浏览器内核、渲染引擎、JS引擎简介
一.定义 浏览器内核分成两部分:渲染引擎和JS引擎. 由于JS引擎越来越独立,浏览器内核 就倾向于 单指 渲染引擎. 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具.(说白了,就是按照 ...
- centos 7 安装 mysql 5.7
1.环境 Centos 7 2.下载 官方网站https://dev.mysql.com/downloads/mysql/5.7.html#downloads ,选择要下载的版本,centos 7 同 ...
- Redis学习系列五Set(集合)
一.简介 Redis中的Set(集合)相当于C#中的HashSet,它内部的键值对时无序的.唯一的.用过Dictionary的都知道,Dictionary都知道,里面的每个键值对肯定是唯一的,因为键不 ...
- linux下的进程(孤儿进程、僵尸进程)
linux提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到.这种机制就是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开文件,占用的内存等.但是仍然为其保留一定的信息 ...
- text_edit 未定义解决
找到文件:admin\controller\setting $data['heading_title'] = $this->language->get('heading_title'); ...