js 延长作用域链

function buildUrl() {

var qs = "?debug=true";

with (location) {

var url = href + qs;

}

return url;

}

console.log(buildUrl())

在此,with 语句接收的是 location 对象,因此其变量对象中就包含了 location 对象的所有属 性和方法,而这个变量对象被添加到了作用域链的前端。buildUrl()函数中定义了一个变量 qs。当在 with 语句中引用变量 href 时(实际引用的是 location.href),可以在当前执行环境的变量对象中 找到。当引用变量 qs 时,引用的则是在 buildUrl()中定义的那个变量,而该变量位于函数环境的变 量对象中。至于 with 语句内部,则定义了一个名为 url 的变量,因而 url 就成了函数执行环境的一 部分,所以可以作为函数的值被返回。

因为with的方法,所以url也变成了函数buildUrl环境变量

原文地址:https://www.cnblogs.com/mawn/p/9205458.html

时间: 2024-08-04 01:55:17

js 延长作用域链的相关文章

javascript:with的用法以及延长作用域链

转自:http://lllt.iteye.com/blog/1246424 <Javascript高级程序设计(第二版)>第66页中提到:“由于with语句的变量对象是只读的,结果url就成了函数执行环境的一部分,因而可以作为函数的值被返回.”,不知道谁看完觉得一头雾水? 首先来看看他举的例子: Js代码   function buildUrl(){ var qs="?debug=true"; with(location){ var url=href+qs; } retur

js改变作用域链

js有两种作用域:全局和局部 在最外层定义的变量拥有全局作用域,对任何内部函数来说,都是可以访问的:而局部作用域则只有内部函数定义的变量才拥有:在函数内部定义变量时,要使用var,否则定义的变量时全局变量 js是没有块级作用域的,因此for循环中的i在执行完循环后,还可以被同作用域的代码获取.js的作用域都是相对于函数而言,是函数作用域. js的作用域链: 每个函数执行都会生成一个执行环境,全局执行环境是最外围的执行环境且被认为是window对象,因此所有全局变量和函数都会作为window对象的

JS 之作用域链和闭包

1.JS无块级作用域 <script> function Main(){ if (1==1){ var name = "alex"; } console.log(name); } Main(); </script>执行结果:{}即块级作用域. alex 2.JS采用函数作为作用域链 <script> function Main(){ var innerValue = "alex"; } Main(); console.log(in

js中作用域链的问题

为什么没有var声明的变量是全局的? 是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止,如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是js中的作用域链 <script> var i = 10; function f1() { //第一层 i = 20; function f2() { //第二层 i = 30; function f3() { //第

JS的作用域链与原型链

来一波,好记性不如烂笔头. 这两条链子可是很重要的. 作用域链 当执行一段JS代码(全局代码或函数)时,JS引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加载后会首先创建一个全局的作用域,然后每执行一个函数,会建立一个对应的作用域,从而形成了一条作用域链.每个作用域都有一条对应的作用域链,链头是全局作用域,链尾是当前函数作用域.作用域链的作用是用于解析标识符,当函数被创建时(不是执行),会将this.arguments.命名参数和该函数中的所有局部变量

JS的作用域链

一 作用域链可以被看作一种路径, 沿着这条路径可以确定变量的值.. 二 作用域链的特点 (1) var关键字决定了哪个函数是变量的作用域链的终点;(2) 当引用一个变量时, JS会沿着由对象执行路径构成的作用域链进行解析, 查找变量最近定义的值, 一旦找到, 即使用该值.. 三 作用域链的图例 四 作用域链实例 (1) function example() {var age = 23;}var age = 25;example();alert(age); // 将输出25 说明: 当执行exam

js中级-作用域链

作用域:浏览器给js的一个生存环境(栈内存). 作用域链:js中的关键字var和function 都可以提前声明和定义,提前声明和定义的放在我们的内存地址(堆内存)中.然后js从上到下逐行执行,遇到变量就去内存地址查找是否存在这个变量.有就使用,没有就继续向父级作用域查找直到window下结束,这种查找机制叫作用域链. Js代码中存在着大量的变量和函数,我们在使用它们的时候一定要知道它们到底归属谁. 原文地址:https://www.cnblogs.com/wsxxy/p/10054775.ht

JS高级——作用域链

基本概念 1.只要是函数就可以创造作用域 2.函数中又可以再创建函数 3.函数内部的作用域可以访问函数外部的作用域 4.如果有多个函数嵌套,那么就会构成一个链式访问结构,这就是作用域链 <script> //f1--->全局 function f1() { //f2--->f1--->全局 function f2() { //f3---->f2--->f1--->全局 function f3() { } //f4--->f2--->f1----&

浅谈JS的作用域链(三)

前面两篇文章介绍了JavaScript执行上下文中两个重要属性:VO/AO和scope chain.本文就来看看执行上下文中的this. 首先看看下面两个对this的概括: this是执行上下文(Execution Context)的一个重要属性,是一个与执行上下文相关的特殊对象.因此,它可以叫作上下文对象(也就是用来指明执行上下文是在哪个上下文中被触发的对象). this不是变量对象(Variable Object)的一个属性,所以跟变量不同,this从不会参与到标识符解析过程.也就是说,在代