argunments可以接收所有传递进来的参数。
function fn(){
console.log(arguments)//[1,2,3,4...]
}
fn(1,2,3,4)
js作用域
全局作用域:
全局变量
局部作用域:
局部变量:只能在函数内部使用,如果没有声明,则会自动升级成全局变量。
function fun(){
var num = 10;
num1 = 20;
}
console.log(num);//undefined
console.log(num1); //20;
作用域链
一个函数套一个函数
var num = 10;
function fun(){
var num = 20;
fun1();
function fun1(){
console.log(num);//20; 就近原则
}
}
fun() //20
js运行规则
/*
js引擎在执行代码时分为两步:1.预解析,2.代码执行
1. 预解析:将所有var 和 function 提升到当前作用域的最前面
1.1:变量提升:将所有变量声明提升到当前作用域的最前面,不进行赋值操作
2.2: 函数提升:将所有函数声明提升到当前作用域的最前面,不调用函数
*/
console.log(num);//undefined;var num =10/* 实际执行的代码
var num;
console.log(num);
num = 10;
* */fun();//报错 fun is not a functionvarfun=function(){//函数表达式
console.log('老子是函数');}/*实际执行的代码
* var fun
* fun();
* fun = function(){
* console.log('老子不是函数');
* }
* *///经典例子f1();
console.log(c);
console.log(b);
console.log(a);functionf1(){var a = b = c =9;//相当于 var a = 9;b =9;c=9;//如果是集体声明应该是:var a=9,b=9,c=9;
console.log(a);
console.log(b);
console.log(c);}/*实际执行的代码
var b = 9;
var c =9;
function f1(){
var a=9;
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
f1();
console.log(c);//9
console.log(b);//9
console.log(a);//报错:undefined
*/
对象
创建对象:
var obj = new Object();
var obj = {};
var obj【key】 = value;
调用对象:
obj【‘key’】
obj.key
构造函数:
function 构造函数名(){
this.属性 = 值;
this.方法 = function(){}
}
new 关键字的执行过程:
1. new 构造函数可以在内存中创建一个空的对象
2. this就会指向刚才创建的空对象
3. 执行构造函数的代码
4. 返回这个新对象(所以构造函数不需要return)
遍历对象:
for...in..遍历对象
for(变量 in 对象){
执行语句
}