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 ...
随机推荐
- 04-01 Java switch、for、while、do while语句,循环嵌套,跳转语句break、continue、return
语句 1:switch语句(掌握) (1)格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体n ...
- vue教程3-02 vue动画
vue教程3-02 vue动画 以下代码,已经用包管理器下载好vue,animate <!DOCTYPE html> <html lang="en"> &l ...
- [LeetCode] 206. Reverse Linked List_Easy tag: Linked List
Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...
- spring jpa : 多条件查询
https://www.cnblogs.com/Donnnnnn/p/6277872.html 方式一: 第一步:EmpAccNumService package com.payease.scford ...
- 确保线程安全下使用Queue的Enqueue和Dequeue
场景是这样,假设有一台设备会触发类型为Alarm的告警信号,并把信号添加到一个Queue结构中,每隔一段时间这个Queue会被遍历检查,其中的每个Alarm都会调用一个相应的处理方法.问题在于,检查机 ...
- ES6快到碗里来---一个简单的爬虫指南
学习ES6的时候,没少看ES6入门,到现在也就明白了个大概(惭愧脸).这里不谈ES6,只谈怎么把ES6的页面爬下来放到一起成为一个离线文档. 之前居然没注意过作者把这本书开源了..瞎耽误功夫...地址 ...
- gridvew使用技巧2
GridVew1_RowDataBindGridView1.DataKeys[e.Row.RowIndex].Values[].ToString(); foreach (GridViewRow t i ...
- Vue源码翻译之渲染逻辑链
本篇文章主要要记录说明的是,Vue在Vdom的创建上的相关细节.这也是描绘了Vue在界面的创建上的一个逻辑顺序,同时我也非常拜服作者编码的逻辑性,当然或许这么庞大复杂的编码不是一次性铸就的,我想应该也 ...
- linux weblogic 控制台进入缓慢
实际是JVM在Linux下的bug 他想调用一个随机函数 但取不到 暂时的解决办法是 1)较好的解决办法: 在Weblogic启动参数里添加 “- Djava.security.egd=file:/d ...
- Oracle sys 用户无密码文件无法登录
1.安装时候,global database name 环境变量听ORACLE_SID不一致,生成的sys密码文件默认为global database name 一致,但在连接时候service n ...