js作用域
2017-09-03 21:38
323 查看
//js中正常模式下只有全局作用域和函数作用域,严格模式下,还有eval作用域
//函数作用域
var scope="global";
var t=function(){
console.log(scope);
var scope="local"
console.log(scope);
};
t();
var name="global";
if(true){
console.log(name);
var name="local";
}
console.log(name);
var n=1,m=2;
function add(){
console.log(n+m);
var n=3;
console.log(n+m);
}
add();
function t2(flag){
if(flag){
var s="ifscope";
for(var i=0;i<2;i++)
;
}
console.log(i);
console.log(s);
}
t2(true);
//函数作用域的特性 : 局部变量在整个函数体始终是有定义的,我们可以将变量声明“提前”到函数体内,
//同时变量初始化还在原来位置。
//变量作用域
function t(flag){
if(flag){
s="ifscope";
for(var i=0;i<2;i++){
;
}
console.log(i);
}
}
//js中没有用var声明的变量都是全局变量,而且都是顶层对象的属性。
//当用var声明一个变量是,创建的这个属性是不可配置的,也就是说无法通过delete运算符删除
//var name=1 ->不可删除
//sex=”girl“ ->可删除
//this.age=22 ->可删除
//作用域链
name="lwy";
function t3(){
var name="tlwy";
function s(){
var name="slwy";
console.log(name);
}
function ss(){
console.log(name);
}
s();
ss();
}
t3();
//作用域链都是从当前函数开始-->嵌套函数-->全局对象,不与同级别的函数有关
//当执行s时,将创建函数s的执行环境(调用对象),并将该对象置于链表开头,然后将函数t的调用对象链接在
//之后,最后是全局对象。然后从链表开头寻找变量name,很明显
//name是"slwy"。
//但执行ss()时,作用域链是: ss()->t()->window,所以name是”tlwy"
//with语句,主要用来临时扩展作用域链,将语句中的对象添加到作用域的头部
person={name:"yhb",age:22,height:175,wife:{name:"lwy",age:21}};
with(person.wife){
console.log(name);
}
//函数作用域
var scope="global";
var t=function(){
console.log(scope);
var scope="local"
console.log(scope);
};
t();
var name="global";
if(true){
console.log(name);
var name="local";
}
console.log(name);
var n=1,m=2;
function add(){
console.log(n+m);
var n=3;
console.log(n+m);
}
add();
function t2(flag){
if(flag){
var s="ifscope";
for(var i=0;i<2;i++)
;
}
console.log(i);
console.log(s);
}
t2(true);
//函数作用域的特性 : 局部变量在整个函数体始终是有定义的,我们可以将变量声明“提前”到函数体内,
//同时变量初始化还在原来位置。
//变量作用域
function t(flag){
if(flag){
s="ifscope";
for(var i=0;i<2;i++){
;
}
console.log(i);
}
}
//js中没有用var声明的变量都是全局变量,而且都是顶层对象的属性。
//当用var声明一个变量是,创建的这个属性是不可配置的,也就是说无法通过delete运算符删除
//var name=1 ->不可删除
//sex=”girl“ ->可删除
//this.age=22 ->可删除
//作用域链
name="lwy";
function t3(){
var name="tlwy";
function s(){
var name="slwy";
console.log(name);
}
function ss(){
console.log(name);
}
s();
ss();
}
t3();
//作用域链都是从当前函数开始-->嵌套函数-->全局对象,不与同级别的函数有关
//当执行s时,将创建函数s的执行环境(调用对象),并将该对象置于链表开头,然后将函数t的调用对象链接在
//之后,最后是全局对象。然后从链表开头寻找变量name,很明显
//name是"slwy"。
//但执行ss()时,作用域链是: ss()->t()->window,所以name是”tlwy"
//with语句,主要用来临时扩展作用域链,将语句中的对象添加到作用域的头部
person={name:"yhb",age:22,height:175,wife:{name:"lwy",age:21}};
with(person.wife){
console.log(name);
}
相关文章推荐
- eval在JS中的作用
- js深入浅出 函数和作用域(二)
- 异步JS框架的作用以及实现方法
- js中return的作用
- js变量、作用域及内存详解
- JS方法尾部有一个()的作用
- React Native 原生与JS之间事件绑定注册 作用在于原生可以直接调用JS的方法
- 简单理解JS作用域问题
- js之执行环境(作用域)
- JS IF 作用域
- JS中的作用域(scope)
- JS作用域与作用域链详解
- JS中冒号的作用
- js使用立即调用的函数表达式创建局部作用域问题
- js中 replace(/\//g, '') 什么作用.
- 【Miaov】JS6-作用域
- js中闭包作用举例
- js 闭包的作用 简单的例子 说明
- js变量以及其作用域详解
- JS基本类型与引用类型的值与作用域