js基础 变量作用域

一、什么是作用域
作用域表示变量或者函数的可访问范围。

(1)JS中的作用域分两种
①局部(函数)作用域:只能在某个函数内部生效。
②全局作用域:在任何的位置都可以生效。

(2) 案例解析

/案例1
var num1 = 1;          //num1全局变量
function fn(){
  var num2 = 2;
  //在函数中访问num1
  console.log(num1);
};
fn();
console.log(num2);     //num2局部变量

//案例2
var num3 = 1;
function fn1(){
  //全局变量可以在任意位置访问
  //既然可以访问,则同时可以修改变量num3的值
  num3 = 3;
};
fn1();
console.log(num3);  //调用fn1函数打印结果为3,不调用,打印结果为1.

//案例3
function fn2(){
  var num4 = 4;   //局部变量
  //在局部不使用var声明的变量自动就是全局变量
  num5 = 5;        //全局变量,不推荐  
};
console.log(num4);
console.log(num5);

二、变量的声明提升
(1)定义
      JS程序在执行前,声明的变量都会预加载到所在作用域程序的最前边,但是赋值还是在原来的位置。函数的内部同样也存在变量的提升。
(2)案例解析

//案例1(全局作用域)
console.log(num5);   //undefined
var num5 = 5;
console.log(num5);   //5

//案例2(局部作用域)
function fn3(){
  console.log(a);   //undefined
  var a = 2;
  console.log(a);   //5
};

三、按值传递
(1)定义
按值传递指将实参的值拷贝一份传递给形参
如果传递的值是原始的数据类型(5个基本数据类型),则在方法内修改参数变量,不会影响到外部的参数变量。 

(2)案例解析

//案例(按值传递)
var x = 1;
function myfun(y){
  //实参传递给形参
  y++;              //底层执行时,会拷贝一份x值,放入一个新的内存空间
  console.log(y);   //2,y值变化不影响x
};
myfun(x);
console.log(x);     //1
上一篇: js基础 自定义函数
下一篇: js基础 函数作用域
作者邮箱: 203328517@qq.com