js组成
ECMAScript (js标准,ECMA-262)
DOM(文档对象模型,是W3C国际组织的一套Web标准 ,它定义了访问HTML文档对象的一套属性、方法和事件。)
BOM(浏览器对象模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构,包含打开窗口,关闭窗口等,顶层对象是window)
js
js是弱类型脚本语言
顺序解析
边解析边执行
定义变量用var
最长255字符、禁止使用关键字保留字等、中间不能有空格
全局变量局部变量区别
全局变量:用var在函数外声明的变量 、不使用var在函数内声明的变量(不建议使用)
局部变量:在函数内使用var声明
var let const 区别
var声明的全局变量是挂在window上的
let、const在最外层声明,也不会挂在window上
var声明变量,可以有变量提升,const、let会报错,声明前不能使用
let、const是有块级作用域的,变量不会泄露
for(var i=0;i<5;i++){
}
console.log(i) //5
for(let i=0;i<5;i++){
}
console.log(i) //i is not defined
setTimeout异步后执行,执行setTimeout时,for已经走完
for(var i=0;i<5;i++){
setTimeout(function(){
console.log(i)
},1000)
}
console.log('hou')
// hou 5个5
//想要一秒后打印
方法一:封闭空间传参
for(var i=0;i<5;i++){
(function(item){
setTimeout(function(){
console.log(item)
},1000)
})(i)
}
方法二:let 块级作用域 定义函数时候保存了i的值 (let后 封闭空间立即执行传参保存变量的方式成为 不必须)
for(let i=0;i<5;i++){
setTimeout(function(){
console.log(i)
},1000)
}
//每个3秒打印不同i
for(var i=0;i<5;i++){
(
function(item){
setTimeout(function(){
console.log(item)
},3000*i)
}
)(i)
}
或者
for(let i=0;i<5;i++){
setTimeout(function(){
console.log(i)
},3000*i)
}
let 块级作用域
同一个作用域下,可以用var 重复声明同一个变量,值会覆盖
let、const会报错
const 特殊性
1、一旦声明必须赋值,不能使用null占位后进行改写,会报错。
2、如果声明的是复合类型数据,可以修改其属性