javascript 3/13
数据类型
动态属性
var person = new Object();//构造一个对象存入person中
person.name = "Nicholas";//为该对象添加了一个名为name 的属性并赋值
注:不可以给基本数据类型添加属性
复制变量值
- 复制引用数据类型的变量即两个变量指向同一个对象
函数
立即执行函数
无参的立即执行函数
(function(){
alert("hhh");
}
)();//()中写入匿名函数代表一个整体,这个整体就是立即执行函数,加个括号代表自身调用。环境运行到此处时可以直接执行此函数,且只执行一次
有参:
(function(a,b){
alert("a:"+a+"b:"+b);
}
)(1,2);
对象方法
var obj = new Object();
obj.name = "hhh";
obj.age = 18;
//添加对象属性值为函数
obj.startFun = function(){
console.log("对象属性函数");//这个也属于是调用console对象的log方法
};
// console.log(obj.startFun);
//输出startFun函数体
obj.startFun();//对象调用函数
枚举对象中的属性
// 枚举对象中的属性
// for...in语句
var obj = {
name: "hhh",
age: 18,
gender: "male",
};
for(var n in obj){
console.log(n);//打印属性名
console.log(n + ":" + obj[n]);//打印属性值
}
// 遍历obj中的属性,每一次遍历时将属性名赋值给变量
执行环境及作用域
作用域
- 作用域指一个变量的作用的范围
全局作用域:
-
全局作用域在页面打开时创建,在页面关闭时销毁
-
全局作用域中有一个全局对象window,它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用
-
在全局作用域中:
创建的变量都会作为window对象的属性保存
创建的函数都会作为window对象的方法保存 -
全局作用域中的变量都是全局变量,在页面的任意的部分都可以访问的到
变量的声明提前:
使用var关键字声明的变量会在所有代码执行之前被执行,即var定义变量始终在所有代码之前(但是不会被赋值),如果没有var则没有这个属性
函数的声明提前:
使用函数声明形式[function 函数名(){}]创建的函数它会在所有的代码执行之前就被创建,所以可以在函数声明前被调用
函数作用域:
- 调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
- 每调用1次函数就会创建一个新的函数作用域,他们之间是互相独立的
- 在函数作用域中可以访问到全局作用域的变量
- 在全局作用域中无法访问到函数作用域的变量
- 当在函数作用域操作一个变量时, 它会先在自身作用域中寻找(就近原则),如果没有就向上一级寻找,直到找到全局作用域,如果还没有就会报错.
- 在函数中访问全局可以用window.变量名
- 函数作用域中也有声明提前.
- 函数声明也会在所有的代码执行之前被创建
- 在函数中没有使用var声明的变量都会设置为全局变量,可在全局作用域中调用
- 定义形参就相当于在函数作用域中声明了变量
执行环境
- 全局执行环境是最外围的一个执行环境。Web 浏览器中,全局执行环境被认为是 window 对象
- 所有全局变量和函数都是作为 window 对象的属性和方法创建的
- 执行环境:当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。函数执行之后,栈将环境弹出,把控制权返回给之前的执行环境
- 标识符解析是沿着作用域链一级一级地搜索标识符的过程
window 对象的属性和方法创建的 - 执行环境:当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。函数执行之后,栈将环境弹出,把控制权返回给之前的执行环境
- 标识符解析是沿着作用域链一级一级地搜索标识符的过程
3-13 js训练
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3-13 js训练</title>
<script>
// 无参的立即执行函数
// (function(){
// alert("立即执行函数hhh");
// })();
// 有参:
// (function (a, b) {
// alert("a:" + a + "b:" + b);
// }
// )(1, 2);
// 对象方法
// var obj = new Object();
// obj.name = "hhh";
// obj.age = 18;
// obj.startFun = function(){
// console.log("对象属性函数");
// };
// // console.log(obj.startFun);
// obj.startFun();
// 枚举对象中的属性
// for...in语句
var obj = {
name: "hhh",
age: 18,
gender: "male",
};
for(var n in obj){
// console.log(n);//打印属性名
console.log(n + ":" + obj[n]);//打印属性值
}
// 遍历obj中的属性,n为属性值
</script>
</head>
<body>
</body>
</html>