Js两种作用域:全局作用域和函数作用域
- 内部的作用域能访问外部,反之不行。访问时从内向外依次查找。
- 如果在内部的作用域中访问了外部,则会产生闭包。
- 内部作用域能访问的外部取决于函数定义的位置,和调用无关。
作用域内定义的变量、函数申明会提升到作用域顶部
instanceof关键字判断类型Typeof 返回表达式类型
逗号运算符
式子1,式子2
依次运行两个式子,返回式子2
逗号预算符优先级比赋值更低
全局对象
浏览器环境:window
node环境:global
全局对象有下面几个特点:
全局对象的属性可以被直接访问
给未声明的变量赋值,实际就是给全局对象的属性赋值
所有的全局变量、全局函数都会附加到全局对象
这称之为全局污染,又称之为全局暴露,或简称污染、暴露
如果要避免污染,需要使用立即执行函数改变其作用域
JS中的this关键字:
在全局代码中使用this,指代全局对象
在真实的开发中,很少在全局代码使用this
在函数中使用this,它的指向完全取决于函数是如何被调用的
调用方式 | 示例 | 函数中的this指向 |
通过new调用 | new method() | 新对象 |
直接调用 | method() | 全局对象 |
通过对象调用 | obj.method() | 前面的对象 |
call | method.call(ctx) | call的第一个参数 |
apply | method.apply(ctx) | apply的第一个参数 |
改变this指向
call 调用函数的时候更改this的指向 call(this,a,b)
apply 调用函数的时候更改this的指向使用的时候用数组传值 apply(this,[a,b])
hasOwnProperty(传入属性名) 快点属性是不是属于对象本身,而不是在隐式原型上.
属性名 in 对象 判断属性名是不是在自身及其隐式原型上