第 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解析器检测到①这种情况的时候,解析器会为这个变量开辟一个内存空间,如果前面已经存在这个变量,就会把这个变量覆盖掉. 当解析器 ...
随机推荐
- 【原创】大叔问题定位分享(19)spark task在executors上分布不均
最近提交一个spark应用之后发现执行非常慢,点开spark web ui之后发现卡在一个job的一个stage上,这个stage有100000个task,但是绝大部分task都分配到两个execut ...
- redis-list操作
List操作,redis中的List在在内存中按照一个name对应一个List来存储.如图: lpush(name,values) # 在name对应的list中添加元素,每个新的元素都添加到列表的最 ...
- Emacs Org-mode 1 下载、安装、基本使用
1.1 总述 Org 是一种帮助我们做笔记.日常事件或者项目计划的快速高效的文本格式系统. Org 有以下特点: Org mode 基于组织结构(outline-mode)对文本进行组织.具有良好的快 ...
- NOIP2018普及初赛解析
2018年第二十四届全国青少年信息学奥林匹克联赛初赛普及组真题解析 一.单项选择题 1. 以下哪一种设备属于输出设备:(D) A.扫描仪 _B.键盘C. 鼠标 _D. 打印机 解析:送分题,前三个都是 ...
- Hadoop 设置任务执行的队列以及优先级
转自:http://blog.csdn.net/wisgood/article/details/39075883 作业提交到的队列:mapreduce.job.queuename 作业优先级:mapr ...
- 1、python基础
本节主要内容 语言特性 变量 注释 字符串拼接 循环 数据类型与字符编码 三元运算 进制 一 .语言特性 python是一门动态解释性的强类型定义语言. 1.编译和解释语言: 简单讲,编译(compl ...
- Python:爬虫之利用Python获取指定网址上的所有图片—Jaosn niu
# coding=gbk import urllib.request import re import os import urllib def getHtml(url): #指定网址获取函数 pag ...
- angularjs 设置全局变量(constant)
转:angularjs自身有二种,设置全局变量的方法,在加上js的设置全局变量的方法,总共有三种.要实现的功能是,在ng-app中定义的全局变量,在不同的ng-controller里都可以使用. 1, ...
- Data Science Project
https://drivendata.github.io/cookiecutter-data-science/
- [jzoj]3875.【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)
Link https://jzoj.net/senior/#main/show/3875 Problem 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流. ...