JS学习笔记——2

引言

今天学了JS关于变量作用域的一些东西,发现JS真是过于随意。在内存分配和作用范围上面,JS相比python都还要随意。C/C++的我直接三观稀碎。

1. 数组增添元素

var arr = [1,2,3]  	 // arr.length=3
arr.length=5      	 //可以手动直接修改数组的长度
console.log(arr) 	 //[1,2,3,undefined,undefined]
arr.push(4)       	 //[1,2,3,4]
arr[3]=4         	 //[1,2,3,4]
arr[arr.length]=4 	 //[1,2,3,4] 

2. 函数内置arguments

在定义函数的时候往往需要设定接口的参数,包括个数和类型。但是当我们不清楚到底有多少个参数的时候,arguments作为伪数组(只有长度和索引的特性),会将所有的形参都存储下来。

function fn(){                    //每个函数内置一个 arguments
    console.log(arguments)        // { '0': 1, '1': 2, '2': 3 }
    console.log(arguments.length) // 3
    console.log(arguments[2])     // 3
}
fn(1,2,3)

3. 作用域

关于作用域是JS我觉得最草,最随意的地方。

3.1 函数作用域

var num1 = 70
var t = 50
function fn(t){		//形参是局部变量
 	num2 = 100      //函数内部给一个没有声明的变量num2赋值,num2直接当作全局变量使用
    var num1 = 100  //函数内部声明的变量是局部变量
}
console.log(t)      // 50
console.log(num1)   // 70

function fun(){
	t = 500			// 这里函数什么都没有声明,直接对全局变量 t 赋值,有点离谱
}
console.log(t)		// 500

3.2 块级作用域:JS没有块级作用域

if (true){
    var a = 3
}
console.log(a) //竟然有输出,a是全局变量

3.3 变量就近查找

函数里面再定义函数,又是一个骚操作。但是感觉实际上,很少会这么用。

var num = 500
function(){
	var num = 100
    function(){
		console.log(num)  // 100
    /* 内部函数就近查找外部函数是否有该变量
 	如果有就直接输出,没有就再到外层去找 */
 	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值