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 ...
随机推荐
- Git 本地操作
版权声明:数学是研究世界的本质,自然科学是研究上帝的意志,而计算机则是揣摩屌丝人类的意志 目录(?)[-] 命令 git config 增删改查 init clone add commit sta ...
- eclipse上搭建mybatis
1..在help中打开 2.搜索mybatipse 3:功能简介 1:要查找某一个方法 在dao接口中某一个方法中 按住 Ctrl键 鼠标指到方法名称上 选择open xml 就会自动跳 ...
- Docker三剑客之Docker Compose
一.什么是Docker Compose Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/comp ...
- 基于alpine用dockerfile创建的tomcat镜像
1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...
- TypeScript设计模式之装饰、代理
看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...
- odoo开发笔记 -- odoo10 视图界面根据字段状态,动态隐藏创建&编辑按钮
场景描述: 解决方式: 网络搜索,vnsoft_form_hide_edit 找到了这个odoo8的模块, odoo10语法和视图界面有新的变化,所以需要修改一些地方,感兴趣的小伙伴可以对比下两个代码 ...
- MySQL Replication 详解MySQL数据库设置主从同步的方法
MySQL同步的流程大致如下: 1.主服务器(master)将变更事件(更新.删除.表结构改变等等)写入二进制日志(master log). 2.从服务器(slave)的IO线程从主服务器(binl ...
- sql 聚合语句,count的用法
如要获取 result = '1' 的数量COUNT( CASE WHEN result = '1' THEN result END ) SELECT * FROM ( SELECT batchNo, ...
- Linux进程间的通信
一.管道 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: A. 管道是半双工的,数据只能向一个方向流动: B. 需要双工通信时,需要建立起两个管道: C. 只能用于父子进程或者兄弟 ...
- QT QPushButton
#include<QApplication> #include<QWidget> #include<QPushButton> #include<QMenu&g ...