JS_09
一、JS基础语法进阶
1.1、三元运算符
概述:三元运算符是由三部分组成,使用语法如下:
A?B:C
三元运算符A部分:需要一个布尔值(其他类型的数字需要隐式转换为布尔值)
如果A部分为布尔值真,则返回结果为B,如果布尔值为假,则返回结果C
B与C部分:可以使任意类型数值或者是一些表达式
<script>
console.log(true?1:2);//1
console.log(""?1+1:6);//6
</script>
注意:三元运算符经常给变量进行赋值
<script>
var age = true?16:NaN;
console.log(age);//16
</script>
1.2、类数组对象——arguments
概述:函数体中拥有一个引用类型数据arguments。类数组存在的意义:在函数没有形参的情况下,在函数体中可以获取到传递给函数的实参
【类数组对象:类似于不是数组,因为只能使用数组的length属性,不能使用数组的方法】
<script>
//函数的函数体中才有类数组对象arguments
function fun(){
//类数组对象是引用类型的数据
console.log(typeof arguments);
//在没有给函数写形参的情况下可以接收传递进来的实参
console.log(arguments);
var sum = 0;
for(var i = 0 ; i < arguments.length ; i++){
sum += arguments[i];
}
console.log(sum);
}
fun(1,2,3,4,5,6,7,8,9,10);
</script>
1.3、闭包***
概述:闭包【可以访问其他作用域中的变量的函数称为闭包】

<script>
//定义一个全局变量100
var num = 100;
//声明一个函数
function fun(){
num++;//此时修改的是全局变量num的值
console.log(num);
}
//调用函数
fun();
fun();
</script>

当函数fun第一次调用的时候:在函数作用域中没有变量num,因此会沿着作用域链向上(全局)查询。当函数fun第一次执行的时候将全局变量num由100变为101了,当函数fun第二次执行的时候,将全局变量num由101变为102。
1.3.1、闭包经典习题一

<script>
//声明第一个函数【外层函数】
function outer(x){
//声明第二个函数【内层函数】
function inner(y){
console.log(x + y );//300
}
//调用内层函数
inner(200);
}
//调用外层函数
outer(100);
</script>
在这个例子中,inner函数是闭包。
1.3.2、闭包经典习题二

<script>
function outer(){
var a = 100;
function inner(){
a += 10;
console.log(a);
}
//返回值是inner函数的声明部分
return inner;
}
var result = outer();
result();
result();
var result1 = outer();
result1();
result1();
//引用类型的数据比较是否相等时看的是地址是否相等。
console.log(result ==result1);
</script>

当outer第一次执行的时候,声明了一个局部变量a=100,以及声明了第一个inner函数并且返回inner的声明部分
当result执行的时候,自身作用域中没有变量a,因此沿着作用域链向上查询【outer】,而且每一次调用都把原来作用域中的a加10
当outer第二次执行的时候,声明了同名变量a=100以及第二个函数inner的声明部分,然后再次返回并调用,但是这次a的值是从100开始的
上述例子中存在两个闭包。

浙公网安备 33010602011771号