第 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解析器检测到①这种情况的时候,解析器会为这个变量开辟一个内存空间,如果前面已经存在这个变量,就会把这个变量覆盖掉. 当解析器 ...
随机推荐
- 利用远程服务器在docker容器搭建pyspider运行时出错的问题
This system supports the C.UTF-8 locale which is recommended. You might be able to resolve your issu ...
- 常用Mysql或者PostGresql或者Greenplum的语句总结。
1.使用mysql的union all可以同时查询出所有自己想要查询数据表的数据量. select 'user' as tablename, count(*) from user union all ...
- ubuntu chrome 无法从该网站添加应用,拓展程序或脚本
昨天装好ubuntu 18.04 lts版本后,下载了chrome( 版本 68.0.3440.106)和SwitchyOmega,本来计划离线安装,结果提示“无法添加来自此网站的应用.扩展程序和应用 ...
- C#使用FileSystemWatcher控件实现的文件监控功能示例
本文实例讲述了C#使用FileSystemWatcher控件实现的文件监控功能.分享给大家供大家参考,具体如下: FileSystemWatcher 可以使用FileSystemWatcher组件监视 ...
- eclipse 界面开发--windowbuilder
插件地址: http://www.eclipse.org/windowbuilder/download.php http://www.eclipse.org/windowbuilder/
- entityframework单例模式泛型用法
public class yms_Entity<T> where T :DbContext { private static T _instance; public static read ...
- 一次lr异常Error: C interpreter run time error: Action.c (17): Error -- memory violation : Exception ACCESS_VIOLATION received问题分析
今天qq群里人问我一个问题 人家的原始问题如下: 问题是为啥通过lr_save_string取不到参数值 由于别的问题,我也需要调试,但是没有环境,只能模拟场景,如下 他想将token变量换成lr中的 ...
- 20172328 2018-2019《Java软件结构与数据结构》第三周学习总结
20172328 2018-2019<Java软件结构与数据结构>第三周学习总结 概述 Generalization 本周学习了第五章:队列.主要内容包含队列的处理过程.如何用对例如求解问 ...
- xshll 连接ubuntu出现 ssh服务器拒绝了密码
一般进行到这一步,可能是sshd的设置不允许root用户远程登录 首先修改一下vim /etc/sshd/ssh_config 修改成如下图: 如果找不到或修改不行 可以先用普通用户登录再su到roo ...
- centos升级python2.7到3.6之后造成yum命令报错
今天学习浏览器模拟,把云端centos上的python2.7升级到3.6,但是安装其他软件时发现报如下错误: File "/usr/bin/yum", line 30 except ...