作用域链和函数内部this指向问题以及bind.call.apply方法 作用域链 作用域是相对于变量而言的, 其意义就在与查找变量(确定变量的来处, 变量是否可以访问到, 确定变量在当前位置是否可以取到值) JS分函数作用域和全局作用域 JS变量又遵循就近使用的原则 首先在使用该变量的当前作用域查找 , 如果当前作用域声明了这个变量,就可以确定结果:如果没有查找到,进入步骤2 查找当前作用域的上级作用域,也就是当前函数的上级函数,看看上级函数中有没有声明 再查找上级函数的上级函数,直到全局作用…
this的指向问题 全局作用域下的this指向 无论是否是严格模式,全局作用域下的this始终指向window 函数内部的this 严格模式下: function test() { 'use strict' console.log(this) } test(); // undefined window.test(); // window 非严格模式下: function test() { console.log(this) } test(); // window window.test(); /…
原文:http://blogs.msdn.com/b/jscript/archive/2007/07/26/scope-chain-of-jscript-functions.aspx 在JavaScript中,函数的作用域链是一个很难理解的东西.这是因为,JavaScript中函数的作用域链和其他语言比如C, C++中函数的作用域链相差甚远.本文详细解释了JavaScript中与函数的作用域链相关的知识,理解这些知识可以帮助你在处理闭包的时候避免一些可能出现的问题. 在JavaScript中,函…
1.三元运算if条件成立的结果 if 条件 else 条件不成立的结果例如: a=20 b=10 c=a if a>b else b print(c) 2.命名空间 全局命名空间:创建的存储“变量名与值的关系”的空间叫做全局命名空间  局部命名空间:在函数的运行中开辟的临时的空间叫做局部命名空间 内置命名空间:内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法. 三种命名空间之间的加载顺序和取…
一.前言 Uncaught TypeError: ... is not a function function max(){}表示函数声明,可以放在代码的任何位置,也可以在任何地方成功调用: var max  = function(){};表示函数表达式,即将一个匿名函数赋值给一个变量,实现通过变量来调用这个匿名函数,但它需要在声明过后才能进行调用,如果调用在声明之前就会报如上红色字体的错误.而这在函数声明中不会出现这样的错误. 二.正文 (一).代码示例 //函数表达式 myFunc();//…
在ES6之前,javascript只有全局作用域和函数作用域.所谓作用域就是一个变量定义并能够被访问到的范围.也就是说如果一个变量定义在全局(window)上,那么在任何地方都能访问到这个变量,如果这个变量定义在函数内部,那么就只能在函数内部访问到这个变量. 全局作用域只要页面没关闭就会一直存在,而函数作用域只有在函数执行的时候才存在,执行完就销毁.且每次执行函数都会创建一个新的作用域. 那么什么是作用域链呢? 在了解作用域链之前,我们先了解一个执行期上下文的概念. 执行期上下文:当函数执行时,…
1.作用域 全局作用域:在函数外部使用var关键字定义的变量 局部作用域:在函数内部使用var关键字定义的变量 特点   (1)局部变量无法直接影响全局变量    (2)在局部作用域中可以使用全局作用域的变量 2.作用域链 函数内部变量在进行查询时,遵循的规则: (1)首先从函数自身所在的作用域进行查找 (2)若没有,则向父级或者是先辈作用域进行查找 (3)若没有,最终的值就是undefined 3.局部变量影响全局变量的方法 (1)在函数内部不使用var关键字定义变量 (2)使用return关…
在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于这类型的编程语言,javascript是没有块级作用域.取而代之的,javascript使用的是块级作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. 在如下的所示的代码中,在不同位置定义了变量 i . j 和 k ,它们都在同一个作用域内——这三个变量在函数体内均是有定义…
js修改函数内部的this指向 在调用函数的时候偶尔在函数内部会使用到this,在使用this的时候发现并不是我们想要指向的对象.可以通过bind,call,apply来修改函数内部的this指向. 默认在浏览器下script标签内定义的函数,调用的时候函数内部的this指向window(浏览器窗口对象) <script> var a=2 function hello(){ console.log(this) console.log(this.a) } hello() //输出: window…
改变JavaScript中函数的内部this指向! 第一种方法 call call 可以 调用函数 + 改变函数内的this指向! var obj = { name: 'lvhang' } function fun(a, b) { console.log(this); console.log(a + b) } // 需求, 让fun函数中的this指向obj对象!还可以进行参数传递! fun(obj, 4, 6); call 主要作用可以实现继承! // call 主要作用可以实现继承! fun…