关于函数补充

一、作用域

1、定义

代码发挥作用的区域。

2、分类

2.1 全局作用域

  • 全局变量

在函数外面定义的变量。

//全局变量在任何地方都能够访问
var n = 20;
console.log(n);
function fn() {
    console.log(n);//20
}
fn();
console.log(n);//20

注意:
全局变量会保存在window对象里,全局变量的生命周期是在页面打开时产生,页面关闭就自动消失。

2.2局部作用域

  • 局部变量

在函数内部定义的变量。

//局部变量只能在函数内部访问,外部无法使用
function fn(){
    var n = 10;
}
fn();
console.log(n);//函数外部访问局部变量,会报错

注意:
局部变量的生命周期是函数调用时产生,调用结束即消失。

3、作用域的产生

JS中如if for是无法形成作用域的,故在大括号里外声明的变量在任何地方都可以访问。

//if for语句里声明的变量在任何地方都能访问
var i=1;
if (i<=10) {
    var n = 20;
    i++;
}
console.log(n); // 20

for(var i=1 ;i<=10;i++){
}
console.log(i); // 11

二、变量的访问规则

  • 局部位置变量的访问规则

在局部位置访问变量时,遵从就近原则:即先从局部作用域下找该变量,如果找到就停止寻找,如果局部作用域下没有,往上找,如果全局作用域下都没有,则报错。

var x = 10;
function fn(){
    var x = 20;
    console.log(x); //20
}
fn();

var a = 20;
function foo() {
    console.log(a);//undefined
    var a = 10;
    console.log(a);//10
}
foo();

三、变量的赋值规则

  • 局部位置变量的赋值规则

局部位置变量的赋值规则依旧遵从就近原则。

 var x = 10;;
 function fn() {
     var x = 20; //初始值
     x = 30;  //重新赋值
     console.log(x); // 30
 }
 fn();
 console.log(x); // 10
var a = 10;
function test(a) {
   // a: 局部变量
   a = a- 3;  // a=7
}
test(a);
console.log(a); //10  

四、变量提升

JavaScript 中,变量的声明都将所有声明部分提升到当前作用域的最顶部,并且函数提升在变量提升上面。
对于变量:变量的声明部分会提升,初始化的值不会。
对于函数:函数整体都会被提升。

//原始代码
fn();
function fn(){
   console.log(a);
}
var a = 10;
//经过JS解释器的代码
//函数提升在变量之上
function fn(){
    console.log(a);
}
var a ;
fn();
a= 10;

五、递归

在函数内部,直接或者间接调用函数自己。

//通过递归循环输出语句
var x =0;
function fn(){
     x++;
     console.log('明天又明天,明天何其多!');
     if (x==10) {
         return;
      }
      fn();//函数内部调用函数本身
}
fn();

注意:
递归一定要有出口,不然就是死递归
return: 终止函数的执行
break: 用于终止循环

六、对象

  1. 概念

    对象是一组无序的相关属性和方法的集合。
    属性:静态的描述信息: 如身高,体重... 
    方法:动态的行为:  如吃饭,睡觉.....
    

2、定义

var obj = {}
            
//对象属性
obj.name = '小明';
obj.age = 19;
obj.weight = 150;
obj.sex = '男'
//对象的方法
obj.eat = function(){
      console.log('会吃吗');
} 
console.log(obj);//obj代表整个对象

3、对象的遍历

for(var k in obj){
   // console.log(k); // 键
   // console.log(obj[k]); //值
      console.log(k, obj[k]);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值