变量提升
//1
console.log(a);//undefined
var a=10;
// // 如果一个变量声明以后,会把变量的声明提升到整个作用域的最前面,但是**赋值还是原来的位置**
//等价于 var a;console.log(a); a=10;
//2
console.log(a)//a 没定义
a=10
// 如果一个变量没有声明直接赋值,作用域就是**赋值以后的区域可以使用**
//3
add()
function add(){
console.log(111)//111
}
// 通过function 函数名(){}定义的函数,会把整个函数提升到作用域的最前面
//等价于 function add(){...} add();
//4
add() //报错 add不是一个函数
var add=function(){
console.log(111)
}
//通过var声明 只会把变量提升到前面 赋值还是原来的位置
// 等价于 var add; add(); add=function(){...}
//5
var a=10;
function add(){
console.log(a);//undefined
var a=100;
}
add()
// 全局变量和局部变量同时生效,优先局部变量
//6
function add(){
var a=100;
}
console.log(a)// a没定义
// 在函数定义中var的变量 仅在调用时,动态创建 调用后,会随着局部作用域一同销毁!
//7
function add(){
a=100;
}
add()
console.log(a)//100
如果一个变量没有声明直接赋值,作用域就是赋值以后的区域可以使用
//8
function add(){
var a=100;
}
add();
console.log(a); //a 没定义
//函数内部声明的变量 只能在函数内部使用
</script>
get set 应用
var circle={
r:20,
// get 方法名 获取值
get acr(){
return Math.PI*this.r*this.r;
},
// set 方法名 设置值
set acr(value){
this.r=value
}
}
console.log(circle.acr);
circle.aaa=100;
console.log(circle.acr);
innerHTML的原理就是get set 方法
属性特征
属性 | 意义 |
---|---|
writeable | 是否可被修改 默认 |
enumerable | 是否可以被遍历 |
configurable | 是否可以被重新配置 |
value | 当前属性的值 |
var stu={
name:'ww',
age:10,
}
//普通方法创建的对象 可以直接修改
//并且属性可以直接被遍历到
stu.name="aa";
// for(var key in stu){
// console.log(key);
// }
//定义属性特征
Object.defineProperty(stu,'password',{
//对应的值
value:123,
// 是否可以被修改
writeable:false,
//是否可以被遍历
enumerable:false,
//是否可以被重新配置
configurable:false
})
for(var key in stu){
console.log(key);//值为 name age
}
// 修改不成功,但是不会报错
stu.password=111;
console.log(stu.password);//123