作用域

Javascript变量作用域!

孤街浪徒 提交于 2020-02-01 05:52:50
基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象 讲一个值赋值给变量时,javascript解析器首先要确定是基本类型还是引用类型,基本数据类型可以直接操作保存在变量中的值,而引用数据类型的值是保存在内存中的对象,在操作对象是,实际上操作的是对象的引用而不是实际的对象 变量的赋值 如果从一个变量上向另一个变量上复制 基本数据类型 的值,会在变量对象上创建一个新值,然后把该值复制到新变量的位置上,这个很好理解,来看下例子: javascript var num1 = 5; var num2 = num1; 这是基本数据类型,而引用类型呢?其实同样会将原来变量上的值复制一份到新的变量当中,只不过,复制的其实是原来变量的一个指针,而这个指针指向存储在堆中的一个对象。复制完成后,两个变量都指向了堆中的同一个对象,所以改变其中一个的值,会对另外一个产生影响。有以下代码 javascript var obj1 = new Object(); var obj2 = obj1; obj1.name = "Nicholas"; alert(obj2.name); //"Nicholas" 传递参数 在javascript里面,参数的传递都是按照 值类型来传递 的,即使你传入的是一个引用类型 javascript function setName(obj)

深入理解js的原型和闭包系列1

馋奶兔 提交于 2020-02-01 02:09:56
原文链接: https://www.cnblogs.com/wangfupeng1988/p/3977924.html https://www.cnblogs.com/wangfupeng1988/p/3977924.html 对象——若干属性的集合。 ---------------------------------------------------------------重点要牢记------------------------------------------------------------- 要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”, 要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”, 要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”, 要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”, 要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”, 要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”, 要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”, 13.自由变量: 在A作用域中使用的变量x,却没有在A作用域中声明(即在其他作用域中声明的),对于A作用域来说,x就是一个自由变量; 要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”,

如何输出1-5题详解

安稳与你 提交于 2020-02-01 02:00:35
如何输出1-5 for (var i = 1; i <= 5; i++) { setTimeout(function timer() { console.log(i) }, i * 1000) } // 6 6 6 6 6 分析 i的作用域链: timer scope -> global scope i变量会循着以上的作用域链来查找,当然此时是在global作用域链找到了i ,但是setTimeout是异步的,会在1s、2s、3s、4s、5s时运行,这个时候都去找全局的i,此时循环早就完成了,i变为6,所以输出5个6,解决问题的关键有两种思路 解决问题的关键 为每次循环的函数保存此次循环的变量状态 1. 利用实参 PS: 参数列表 在ES6时,已经被明确定义为一个作用域 在timer scope函数体内查找i变量后, 在向上查找之前,会查找函数实参列表中的变量,我们将i传入,并在调用函数时使用这个i,每个函数实例能够保存自己的实参状态,就能解决i的共享问题 for (var i = 1; i <= 5; i++) { setTimeout( function timer(j) { console.log(j) }, i * 1000, i ) } // 1 2 3 4 5 2. 产生作用域来保存状态 我们知道,前面的问题是状态最终都指向了global上的i,作用域可以保存变量的状态

【javascript】Javascript闭包

限于喜欢 提交于 2020-02-01 01:58:33
  在描述闭包的实现与用途前,需要了解以下一些知识点。   执行上下文(执行上下文环境)   1 console.log(a); //Uncaught ReferenceError: a is not defined 2 3 console.log(b); //undefined 4 var b; 5 6 console.log(c); //undefined 7 var c = 10;   看上面一个例子,当直接在控制台输出a时,提示a未定义,这个很容易就理解了。不过在"var b"和"var c = 10"执行前输出b和c的值时,得到的结果却是undefined。因为代码是一条一条执行的,在执行console.log()之前,"var b"和"var c = 10"必定是还未执行的。而结果却与a的输出结果不同,这是怎么一回事?  第二种情况: 1 console.log( this ); 输出: 第三种情况: 1 console.log(f1);   2 function f1(){};  //函数声明 3 4 console.log(f2); 5 var f2 = function (){};  //函数表达式 输出:    从这里可以看出来,在一段js代码拿过来真正一句一句运行之前,浏览器做了一些“准备工作”,其中就包括对变量的声明,而不是赋值

总结一些前端的知识点

南楼画角 提交于 2020-02-01 01:55:43
一、W3C 标准盒模型和 IE 盒模型区别: 1. W3C 标准盒模型: 盒子的高宽是由盒子的内容区仅由 width, height 决定的,不包含边框,内外边距。 2. IE 盒模型: 在 IE 盒模型中,盒子宽高不仅包含了元素的宽高,而且包含了元素的边框以及内边距。 所以在同样的设置下,IE 下的元素会看起来相对于标准盒子来的小,如果你想要标准盒子变为像 IE 盒模型,可以对元素样式进行设置: .item { box-sizing: border-box; //IE 盒模型效果 box-sizing: content-box; //默认值,标准盒模型效果 } 二、querySelectorAll 与 getElementsBy 系列的区别: 根据该问题下的答案 querySelectorAll 方法相比 getElementsBy 系列方法有什么区别? ,我简单地总结一下: querySelectorAll 属于 W3C 中 Selectors API 规范, 而 getElementsBy 系列则属于 W3C DOM 规范。 querySelectorAll 方法接受参数是 CSS 选择符,当传入的是不符合 CSS 选择符规范时会抛出异常,而 getElementsBy 系列则接受的参数是单一的 className,tagName 等等。 从返回值角度来看

Bean的作用域

那年仲夏 提交于 2020-01-31 23:29:06
singleton:单例的,默认情况下为单例,singleton在容器启动之前就创建好了对象,并保存在容器当中。任何时候获取都是获取之前创建的那个bean,一个bean的定义对应着一个对象的实例。 prototype:多例的,在容器启动之前并不会创建对象,而是在获取的时候才创建这个bean,每次获取都会创建一个新的实例,一个bean的定义对应着多个对象的实例。 request:在web环境下同一次请求创建一个bean实例 session:在web环境下同一次会话创建一个bean实例 global session:在web环境下全局的会话创建一个bean实例 来源: CSDN 作者: qq_2974743696 链接: https://blog.csdn.net/qq_44892091/article/details/104123192

微信

流过昼夜 提交于 2020-01-31 19:35:11
ES6 let: 说明:访问不了abc,但能访问num. 说明:let霸占了整个if的{},所以num是未定义 面试题: 说明:for执行结束后,没有执行function,到了该调用function的时候,进去找i,此时i=2,所以结果是2,2 说明:for产生了2个块级作用域,每个作用域中的变量值不同, 来源: https://www.cnblogs.com/pjishu/p/12246292.html

JavaScript 作用域

孤人 提交于 2020-01-31 11:11:13
JavaScript 作用域 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 JavaScript 局部作用域 在函数内部声明的变量为 局部变量 ,只能在函数内部访问。 JavaScript 全局作用域 在函数外定义的变量为 全局变量 。 全局变量 有全局作用域,网页中所有脚本和函数均可使用。 如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。 JavaScript 变量生命周期 JavaScript 变量生命周期在变量声明时初始化。 局部变量 在函数执行完毕后销毁。 全局变量 在页面关闭后销毁。 注意: 全局变量,或者函数,可以覆盖 window 对象的变量或者函数。 局部变量,包括 window 对象可以覆盖全局变量和函数。 —— END —— 来源: CSDN 作者: 清晨-阳光zx 链接: https://blog.csdn.net/pro_fan/article/details/104108018

Spring(5)_Bean 的作用域

天涯浪子 提交于 2020-01-30 15:17:26
本系列博客汇总在这里: Spring 汇总 Bean 的作用域 Bean 的作用域 源码工程文件为:spring3.2_03 Bean 的作用域 默认情况下,bean 都是单例的,是容器初始化的时候被创建的,就这么一份! Scope:singleton 单例,prototype 多例,默认使用 singleton。 如果是 singleton 我们可以设置非延迟加载(容器初始化时创建 bean)和延迟加载(getBean 的时候才创建)方式创建 bean。 如果是 prototype 我们没得选择只能是延迟加载方式创建(getBean 的时候才创建)。 如有错误,欢迎指正! 来源: CSDN 作者: 魏宇轩 链接: https://blog.csdn.net/qq_36260974/article/details/104114032

python 变量的作用域

橙三吉。 提交于 2020-01-30 07:33:27
变量的作用域 1.局部作用域(Local) 每次调用函数时都会创建一个局部作用域。 局部作用域(函数)中定义的变量称之为局部变量。 局部变量的作用域为:从定义变量处开始到函数结束。 函数调用结束后,其对应的局部作用域中的所有变量都会被销毁。 2.嵌套作用域(Enclosing) 每次调用嵌套函数中的外函数时都会创建一个嵌套作用域。 当在外函数内定义变量时,该变量的作用域为:从定义变量处开始到函数结束 外函数调用结束后,其对应的嵌套作用域中的所有变量都会被销毁。(闭包除外) 3.全局作用域(Global) 每次运行模块时都会创建一个全局作用域。 全局作用域(模块)中定义的变量称之为全局变量 全局变量的作用域:从定义变量处开始到模块结束 程序运行结束后,全局作用域中的所有变量都会被销毁。 4.内置作用域(Built-in) 每次启动Python解释器都会自动加载内置模块,从而创建一个内置作用域。 内置模块中的函数(内置函数),可以在程序中直接使用。 停止解释器后,内置作用域中的所有变量都会被销毁。 print(id(123)) # id是内置作用域 id = "Global" # id是全局作用域 def outside(): id = "Enclosing" # id是嵌套作用域 def inside(): id = "Local" # id是局部作用域 print(id) #