关于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的更多相关文章

  1. js词法作用域规则

    function foo() {console.log( a ); // 2不是3} function bar() {var a = 3;foo();} var a = 2;bar(); js中的作用 ...

  2. js词法作用域

    作用域链和原型链是JS中比较重要的2个概念, JS的是函数作用域,与C之类语言的块级作用域不同 JS的作用域还是词法作用域,或者叫静态作用域,作用域链是在语法解析时就完成的,而不是在执行时创建. 例子 ...

  3. [label][JavaScript]读nowmagic - js词法作用域、调用对象与闭包

     原文链接:                 http://www.nowamagic.net/librarys/veda/detail/1305 作用域(scope) JavaScript 中的函数 ...

  4. 区分词法作用域(js)与动态作用域(精!)

    在js学习中,词法作用域是必须要掌握的! 在这里,我将总结一下<你不知道的JS>一书中词法作用域的重点并分享给大家! 首先带来一段代码示例: function foo(){ console ...

  5. JS教程:词法作用域和闭包 (网络资源)

    varclassA = function(){ ; } classA.prototype.func1 = function(){ var that = this, ; function a(){ re ...

  6. JS的词法作用域

    词法作用域定义实现的规则: 1 函数作用域实在定义的时候决定的,而不是在执行时候决定 2 为了实现这种词法作用域,函数内部不仅包含函数代码逻辑,还必须引用当前的作用域链. 3 函数对象可以通过作用域链 ...

  7. 网易JS面试题与Javascript词法作用域说明

    调用对象位于作用域链的前端,局部变量(在函数内部用var声明的变量).函数参数及Arguments对象都在函数内的作用域中--这意味着它们隐藏了作用域链更上层的任何同名的属性. 2010年9月14日, ...

  8. js 中采用词法作用域

    所谓的 词法( 代码 )作用域, 就是代码在编写过程中体现出来的作用范围. 代码一旦写好, 不用执行, 作用范围就已经确定好了. 这个就是所谓词法作用域. 在 js 中词法作用域规则: 1.函数允许访 ...

  9. JS高级. 05 词法作用域、变量名提升、作用域链、闭包

    作用域 域,表示的是一个范围,作用域,就是作用范围. 作用域说明的是一个变量可以在什么地方被使用,什么地方不能被使用. 块级作用域 JavaScript中没有块级作用域 { var num = 123 ...

随机推荐

  1. Android自定义组合控件详细示例 (附完整源码)

    在我们平时的Android开发中,有时候原生的控件无法满足我们的需求,或者经常用到几个控件组合在一起来使用.这个时候,我们就可以根据自己的需求创建自定义的控件了,一般通过继承View或其子类来实现. ...

  2. Liferay-Activiti 企业特性功能介绍 (新版Liferay7)

    前言 如果你是开发者 你已经是多少次开发一个项目,一次次的用一些框架,一次次的写类似的重复的代码,一次次建表\写类和方法\写HTML\CSS\JAVASCRIPT,一次次测试,一次次的写Bug...如 ...

  3. 前端基础——html

    前端基础——html 在用CSS布局页面的时候,我们会将HTML标签分成两种,块级元素和内联元素(我们平常用到的div和p就是块级元素,链接标签a就是内联元素) 块级(行级)标签 和 内联标签 块级元 ...

  4. SSDT Hook实现内核级的进程保护

    目录 SSDT Hook效果图 SSDT简介 SSDT结构 SSDT HOOK原理 Hook前准备 如何获得SSDT中函数的地址呢 SSDT Hook流程 SSDT Hook实现进程保护 Ring3与 ...

  5. Jenkins使用TFS部署

    之前发表过一篇Jenkins的文章 使用Jenkins部署.Net应用程序 里面是使用GIT做的版本管理 今天更新下使用TFS做版本管理 首先在插件管理中搜索tfs,我这里因为已经装了,所以在已安装列 ...

  6. 读书笔记(01) - JSON - JavaScript高级程序设计

    JSON与JavaScript对象 JSON是一种表示结构化数据的存储格式,语法格式上与JavasScript对象有些类似. TIPS: 与JavaScript对象的格式区别 不支持变量.函数或对象实 ...

  7. 【JAVA】抽象类,抽象方法

    抽象类不能被实例化,有两个特点: 必须继承才有它的用途: 不能描述对象: 抽象方法: 具体实现由子类决定,最终子类必须实现: 没有方法体: 说明: 抽象类不一定包含抽象方法,抽象方法一定是抽象类.

  8. Spring Log4j2 log4j2.xml

    <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-c ...

  9. json.stringify()的妙用,json.stringify()与json.parse()的区别

    一.JSON.stringify()与JSON.parse()的区别 最近做项目,发现JSON.stringify()使用场景真的挺多,我们都知道JSON.stringify()的作用是将 JavaS ...

  10. webpack4 自学笔记四(style-loader)

    全部的代码及笔记都可以在我的github上查看, 欢迎star:https://github.com/Jasonwang911/webpackStudyInit/tree/master/css 引入- ...