js变量详解
来源:互联网 发布:sybase数据库12.5 编辑:程序博客网 时间:2024/06/12 21:28
一、变量声明
1、遵循原则:先声明,后使用
2、预解析机制(变量提升):对紧跟在关键字(如var,function)后面的变量名称进行声明提前(把声明部分提前,赋值部分保留在原位置)。遇到关键字就有声明提前。
二、变量作用域
1、全局作用域---全局变量:(ES5中)三种声明方式
A.var 变量
B.变量
C.windw.变量(原理:对象.属性)
区别:加var的变量,不能被delete删除,不加var的变量会被delete删除。
Window是作用域链的最顶层
2、函数作用域---局部变量:只有变量在函数内声明时,它才是局部变量
特例:不加var的变量在函数内声明,则是全局变量
加了var的变量在函数内声明,才是局部变量
3.作用域链的最顶层是window
4.变量的定义没有块级作用域(如:if,while等块中,即非函数的块),故里面声明的变量还是全局变量
三、未定义的变量和为赋值的变量
1、变量未定义,且未赋值---------报错
2、变量定义,但是未赋值---------undefinde
3、变量未定义,但是有赋值---------正常显示,程序会在全局中隐式声明该变量
关于变量的练习:
1题、
if(!(ainwindow)){
var a=1;
//a=1;//vara被提前后
}
console.log(a)
解析:
1、 变量提升
2、 console.log(变量x in window);变量x必须是干干净净的,不能有赋值,最后输出true;否则输出false。
程序解析为:
var a;//因为a没有被赋值,所以a in window为true
if(!(ainwindow)){//false
var a=1;
}
console.log(a)//undefinde
2题、
var x=1;
y=2;
function fn1(){
deletex;
deletey;//delete只会删除未加var的变量,不会删除加了var的变量和参数
console.log(x);//1
console.log(y);//报错
}
fn1();
解析:delete只会删除未加var的变量,不会删除加了var的变量和参数;
因为y没有直接定义,所以他是全局作用域的一个属性,是可配置的,所以可以删除;x是有var声明的,所以他是不可配置的,所以不可删除;
3题
(function(x){
deletex;//delete对局部变量名不起作用
console.log(x);//5
})(1+4);
解析:delete对局部变量名不起作用
4题、
var a=1;
function fn(){
console.log(a);//1
a=2;//没有加 var,就是全局变量,加var后,则是局部变量
console.log(a);//2
}
fn();
console.log(a);//2
- js变量详解
- js变量详解
- 详解js变量声明提升
- js变量以及其作用域详解
- js变量以及其作用域详解
- js变量以及其作用域详解
- js变量以及其作用域详解
- js变量以及其作用域详解
- js变量以及其作用域详解
- js变量以及其作用域详解
- js变量以及其作用域详解
- js变量以及其作用域详解
- js变量、作用域及内存详解
- js变量以及其作用域详解
- js变量以及其作用域详解
- 详解js变量、作用域及内存
- js变量以及其作用域详解
- JS变量以及其作用域详解
- Sourcetree 的基本使用
- PHP面向对象编程-笔记
- python迭代对象,迭代器,生成器,以及yield用法详解
- Hibernate一对多双向,多对多双向,排序
- java复习系列(1)--实现基于TCP的Socket通信
- js变量详解
- Thinking in Java笔记:Runtime Type Information
- noip2007初赛总结
- 安卓开发日记--2017.10.5
- JVM垃圾回收原理,算法及各种回收器比较
- JavaWeb-JDBC-数据连接池
- QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread
- MyEclipse 10.7.1 导出war包出错
- 一张图讲解对象锁和关键字synchronized修饰方法(代码块)