JavaScript全局作用域,函数作用域的详细解读

JavaScript全局作用域,函数作用域的详细解读

全局作用域:

作用域,是指变量的生命周期(一个变量在哪些范围内保持一定值)。

全局变量:
生命周期将存在于整个程序之内。
能被程序中任何函数或者方法访问。
在 JavaScript 内默认是可以被修改的。

全局变量,虽然好用,但是是非常可怕的,这是所有程序员公认的事实。

显式声明:

带有关键字 var 的声明;

<script type="text/javascript">

    var testValue = 123;

    var testFunc = function () { console.log('just test') };

    /**---------全局变量会挂载到 window 对象上------------**/

    console.log(window.testFunc)		// ƒ () { console.log('just test') }

    console.log(window.testValue)		// 123
    
</script>

其实,我们写的函数如果不经过封装,也会是全局变量,他的生命周期也就是全局作用域;

隐式声明:

不带有声明关键字的变量,JS 会默认帮你声明一个全局变量!!!

<script type="text/javascript">

    function foo(value) {

      result = value + 1;	 // 没有用 var 修饰

      return result;
    };

    foo(123);				// 124
    
    console.log(window.result);			// 124 <=  挂在了 window全局对象上 
    
</script>

现在,变量 result 被挂载到 window 对象上了!!!

函数作用域:

函数作用域内,对外是封闭的,从外层的作用域无法直接访问函数内部的作用域!!!

function bar() {
  var testValue = 'inner';
}

console.log(testValue);		// 报错:ReferenceError: testValue is not defined

通过 return 访问函数内部变量:

function bar(value) {
  var testValue = 'inner';
  
  return testValue + value;
}

console.log(bar('fun'));		// "innerfun"

函数就像一个工厂,我们输入一些东西,它在内部加工,然后给我们一个加工产物;

通过 闭包 访问函数内部变量:
function bar(value) {
  var testValue = 'inner';
  
  var rusult = testValue + value;
  
  function innser() {
     return rusult;
  };
  
  return innser();
}

console.log(bar('fun'));		// "innerfun"

关于闭包,我不会在这篇文章过多描述,因为,想要描述闭包,本身需要跟本文章一样的长度;

立即执行函数:

这是个很实用的函数,很多库都用它分离全局作用域,形成一个单独的函数作用域;

<script type="text/javascript">

    (function() {

      var testValue = 123;

      var testFunc = function () { console.log('just test'); };

    })();

    console.log(window.testValue);		// undefined
    
    console.log(window.testFunc);		// undefined
    
</script>

它能够自动执行 (function() { //… })() 里面包裹的内容,能够很好地消除全局变量的影响;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值