第 1 章 JS变量、作用域
@(es5)
- 基本类型
- 引用类型
一、 判断变量类型
typeof
(能够判断的值:undefined
、string
、number
、function
;其他的类型,如对象、数组、null
和undefined
均判断为object
)instanceof
(不推荐)getPrototypeName
()
Object.getPrototypeName.call(null,variable) === '[object array]'
Object.getPrototypeName.call(null,variable) === '[object object]'
isNaN(NaN)
Array.isArray(ary)
二、作用域 和 上下文
- 变量生命周期
在函数内声明的 变量,在函数执行完了就会结束。 - 访问变量
先在函数内部查找有无变量,若没有,则在函数外部的包裹自身的函数查找,这样依次查找,直至找到全局作用域下。
ps: var
只对第一个变量前的的等号起作用,后面有变量则是全局作用下,(不推荐这种写法)。
function foo() {
var x = y = 0;
}
y;// 0
1. 作用链
ps:闭包可以改变函数的作用链(延长作用链)
function foo() {
var x = 0;
return function () {
return ++x;
}
}
var b = foo();
b();//1
b();//2
2. 上下文(this
)
在es5中,this的指向是调用时使用的对象
function fn () {
console.log(this)
}
fn() // window
const person = {
say: function () {
console.log(this)
}
}
person.say() // person
setTimeout(function () {
console.log(this === window) // true
})
ps: setTimeout
和 setInterval
第一个参数function的this指向是window
二、JS的解析机制
1. 预解析
- 执行代码在前,
function
预解析高于var
。
console.log(a); //function () { ... }
var a = 0;
function a() {
//TODO
}
function fn(){}
这种形式是预解析,不是变量赋值。即,如果var
声明的变量和function fn(){}
的函数同名,在执行过程中执行var
中的变量,而function
对应函数不存在。
console.log(a); //function () { ... }
var a = 2;
function a() {
console.log('fn a()');
}
console.log(a); // 2
// var a = 3;
a(); // error: a is not a function
或
console.log(a); //function () { ... }
var a = 2;
console.log(a); // 2
// var a = 3;
a(); // error: a is not a function
function a() {
console.log('fn a()');
}
三、垃圾收集
历史问题:标记清楚、引用计数、性能问题、管理内存
- 只要重复引用,用变量代替
- 内存少用,能够消除的一定销毁
内存管理销毁
var global_variable = null;
第 1 章 JS变量、作用域的更多相关文章
- [刘阳Java]_步步窥探JS变量作用域
今天的这个文章题目名称甚是让人会突发异想.JS变量作用域是务必需要搞懂的,单从面试过程就会让面试者烧脑壳.所以,我们还是写一篇关于JS变量作用域的技术专题,让所有小伙伴能够借此文章去整理JS的基础学习 ...
- [Effective JavaScript 笔记]第2章:变量作用域--个人总结
前言 第二章主要讲解各种变量作用域,通过这章的学习,接触到了很多之前没有接触过的东西,比如不经常用到的eval,命名函数表达式,with语句块等,下面是一个列表,我对各节的一点点个人总结,很多都是自己 ...
- 原型模式故事链(5)--JS变量作用域、作用域链、闭包
上一章 JS执行上下文.变量提升.函数声明 传送门:https://segmentfault.com/a/11... 本次我们主要讲讲变量作用域和闭包变量作用域:顾名思义:变量起作用的范围.变量分为全 ...
- 解释JS变量作用域的范例
JS的变量作用域只有两种:全局作用域与函数作用域. 用var声明的变量不能简单的说是属于函数作用域,应该是说属于其最近的作用域. var a = 10; function test(){ var a; ...
- 浅谈js变量作用域
变量的作用域也是前端面试题常考的一个问题,掌握下面几个规律可以帮你更好的理解js的作用域. 1.作用域优先级遵循就近原则,函数内部的作用域优先级大于外部 var a=456; var b=111; f ...
- js变量作用域--变量提升
1.JS作用域 在ES5中,js只有两种形式的作用域:全局作用域和函数作用域,在ES6中,新增了一个块级作用域(最近的大括号涵盖的范围),但是仅限于let方式申明的变量. 2.变量声明 var x; ...
- javaScript的闭包 js变量作用域
js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write(&q ...
- JS变量作用域与解构赋值
用var变量是有作用域的 变量在函数内部声明时,那么该变量只属于整个函数体,函数外不可调用 当两个不同的函数里,使用了用一个相同的变量名,二者不互相影响,相互独立 遇到嵌套函数时,外部函数不可调用内部 ...
- 第三章 Js变量的作用域和匿名函数
3.1 先看下面的事例: ①var temp=0; ②temp=0; 当js解析器检测到①这种情况的时候,解析器会为这个变量开辟一个内存空间,如果前面已经存在这个变量,就会把这个变量覆盖掉. 当解析器 ...
随机推荐
- 【原创】大叔经验分享(24)hive metastore的几种部署方式
hive及其他组件(比如spark.impala等)都会依赖hive metastore,依赖的配置文件位于hive-site.xml hive metastore重要配置 hive.metastor ...
- C语言学习及应用笔记之五:C语言typedef关键字及其使用
在C语言中有一个typedef关键字,其用来定义用户自定义类型.当然,并不是真的创造了一种数据类型,而是给已有的或者符合型的以及复杂的数据类型取一个我们自己更容易理解的别名.总之,可以使用typede ...
- 记录一下,PC端vue开发常用框架,已经用过elementUI和iview 接下来尝试另一个Muse-UI 喜欢它的点击效果
官网地址: https://muse-ui.org/#/zh-CN/installation
- 最新版 IntelliJ IDEA2018.3.x 破解教程
https://www.cnblogs.com/Candies/p/10050831.html
- js分析 邮箱地址加密 [email protected]
0.参考 https://segmentfault.com/q/1010000000117476 javascript里function之前加上感叹号 ' ! ' 会怎么样? // 这么写会报错,因为 ...
- Python_多进程
Python 多进程库 multiprocessing ,支持子进程.通信.数据共享.执行不同形式的同步 多进程,绕过gil ,实现多核的利用,多进程也是原生进程,由操作系统维护 在pycharm中, ...
- Python介绍RabbitMQ使用篇二WorkQueue
1. RabbitMQ WorkQueue基本工作模式介绍 上一篇我们使用C#语言讲解了单个消费者从消息队列中处理消息的模型,这一篇我们使用Python语言来讲解多个消费者同时工作从一个Queue处理 ...
- Windows 7 下使用 pandoc 转换文档格式
工作中我们经常需要面对各种各样的文档格式,文档格式转换也就在所难免.通常有些文档编辑工具会提供自带的格式转换功能,但可转换格式比较有限.pandoc 正好可以解决这个问题,几乎你能见到的所有文档格式都 ...
- spark伪分布式的安装
不依赖hadoop 百度分享安装包地址:http://pan.baidu.com/s/1dD4BcGT 点击打开链接 解压 并重命名: 进入spark100目录: 修改配置: Cd conf 配置单击 ...
- Linux内核笔记:epoll实现原理(一)
一.说明 针对的内核版本为4.4.10. 本文只是我自己看源码的简单笔记,如果想了解epoll的实现,强烈推荐下面的文章: The Implementation of epoll(1) The Imp ...