菜鸟js进阶---我理解的函数作用域

其实之前大学有学习过,net和c++的语法,现在已经忘记的差不多。现在捡起来JS的语法,虽然不陌生,但是现在还是要努力的学习下。

js的函数构造貌似跟C的构造有点像。格式都是


function functionName(arg0,arg1,......,argn){
    statements
}

//上面这是一个函数的结构,下面这个例子是一个简单的函数

function sayHi(){
  return("Hello World!");
}

以上的例子呢,这个函数没有参数传入。其实是可以在sayHi()函数内部放写参数的,如果不给这个参数传值,默认是undifined数据类型。

每个方法都是有自己的一个默认的对象的,这个对象的名字叫做‘arguments’,然而你在函数上传入的参数,也都是以数组的形式保存在这个对象上。例如下面这段代码

	function demo(name,sex){
			console.log(arguments.length); //2
			console.log(arguments[0]);     //name
		}
		demo('name','sex');

这块跟作用域没有一点关系,,,接下来咱们来说说js的函数作用域。

我理解的js函数作用域就是----儿子可以啃老,但是老子不能拿儿子的变量。怎么说呢。来咱们上demo

  var color = 'blue'; //全局变量
   function changeColor(){
   	   if (color ==='blue'){
   	   	color = 'green';
   	   }else{
   	   	color = 'red';
   	   }
   }
   changeColor();
   console.log(color);  //green

在这个简单的函数changeColor() 中,作用域链包含两个对象,一个是自家的变量对象arguments和全局环境下的变量对象。可以在函数内部访问到color,就是因为可以在这个作用域链上找到它。

书中还有一个函数内部嵌套函数的例子,能更好的解释这个作用域链,但是我觉得这个其实已经够理解了。就写这个啦,就是我之前说的,儿子可以向老子要东西,可是老子就是拿不到儿子的东西。不管嵌套再深,子集函数总是能访问到父级函数定义的变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值