标签:报错 bsp fine 类型 upd 对象 外部 闭包 function
1.变量数据类型及检测
基本数据类型: 指的是简单的数据段 Boolean null undefined number string Symbol
引用数据类型: 可能由多个值构成的对象 object对象类型 比如 function array date
区别
(1)可变性
基本类型: 不可变类型,无法添加属性
引用类型: 可变类型,支持添加和删除属性
如果判断数据类型
有四种方法 typeof instanceof constructor prototype
var a = "abcdef";
var b = 12345;
var c= [1,2,3];
var d = new Date();
var e = function(){ console.log(111); };
var f = function(){ this.name="cat"; };
最常见的判断方法typeof
typeof a --------------string
typeof b --------------- number
typeof c -------------- object
typeof返回的类型都是字符串形式,
判断已知对象类型的方法 instanceof
c instanceof Array --------- true
d instanceof Date ---------true
f instanceof Function --------- true
注意instanceof 后面一定要是对象类型 并且大小写不能错
根据对象的constructor判断
c.constructor === Array ---------- true
d.constructor === Date ----------- true
注意constructor在类继承的时候会报错
通用的方法prototype
Object.prototype.toString.call(a) ----------- [object String]
Object.prototype.toString.call(b) ----------- [object Number]
Object.prototype.toString.call(c) ----------- [object Array]
2.作用域,作用域链,闭包
变量作用域的类型: 全局变量和局部变量
全局作用域
对于最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的
var outerVar = ‘outter‘ function fn () { console.log(outerVar) } fn() // outter
局部作用域
和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,对于函数外部是无法访问的
function a(){ var innter = ‘inner‘ } a () console.log(innter) // innter is not defined
注意
需要注意的是,函数内部声明变量的时候,一定要使用var命令 如果不使用,将会声明一个全局变量
function fn(){ innvar = ‘dsdasda‘ } fn() console.log(innvar) // dsdasda
作用域链
在js引擎中,通过标识符查找标识符的值,会从当前作用域向上查找,直到作用域找到第一个匹配的标识符的位置,就是js的作用域链
https://www.cnblogs.com/ys-wuhan/p/6979905.html
闭包
红皮书上说的 闭包是指有权访问另外一个函数作用域中变量的函数
(1).闭包可以访问当前函数以外的变量,
function getouter(){ var date = ‘815‘ function getdate(str){ console.log(str + date) } return getdate(‘今天是:‘) // 今天是: 815 } getouter()
getdate是一个闭包,该函数执行时,会形成一个作用域A,A中并没有定义变量date,但它能在父一级作用域中找到该变量的定义
(2).即时外部函数已经返回,闭包仍能访问外部函数定义的变量
function getOuter(){ var date = ‘815‘; function getDate(str){ console.log(str + date); //访问外部的date } return getDate; //外部函数返回 } var today = getOuter(); today(‘今天是:‘); //"今天是:815" today(‘明天不是:‘); //"明天不是:815"
(3).闭包可以更新外部变量的值
function updateCount(){ var count = 0; function getCount(val){ count = val; console.log(count); } return getCount; //外部函数返回 } var count = updateCount(); count(815); //815 count(816); //816
标签:报错 bsp fine 类型 upd 对象 外部 闭包 function
原文地址:https://www.cnblogs.com/icelolo/p/13071616.html