zoukankan      html  css  js  c++  java
  • HTML 学习之JavaScript作用域

    1. 作用域

    1.1 作用域的概述

    通常来说 一段程序代码中所用到的名字并不总是有效和可用的。而跟定这个名字的可用性的代码范围就是这个名字的作用域。

    作用域的使用提高了程序的逻辑性的局部性。增强了程序的可靠性,减少了名字冲突。

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script>
            //JS作用域:就是代码(变量)名字在某个范围内起作用和效果 目的是提高程序的可靠性和减少程序命名冲突
            //JS作用域在(es6)之前分为 全局作用域和局部作用域
            //1. 全局作用域 整个script标签都有用或者是一个单独的JS文件.
            var num = 10;
            console.log(num);//10
            //2. 局部作用域 在函数内部就是局部作用域 这个代码的名字只在函数内部起作用
            function fn() {
                //局部作用域
                var num = 0;
                console.log(num);//0
            }
            fn();
        </script>
    </head>

    2 变量的作用域

    2.1 变量作用域的分类

    在JavaScript中 根据作用域的不同 变量可以分为两种:

    1.全局变量

    2.局部变量

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script>
            //根据作用域的不同 我们变量分为全局变量和局部变量
            // 1 全局变量 在整个Script标签中或者整个js文件中都可以使用
            // 注意 如果在函数内部 没有声明 直接赋值的情况 也属于全局变量 但是必须在函数执行后才能有效
            var num = 10; //全局变量
            console.log(num);
    
            function fn() {
                console.log(num);
            }
            fn();
            //2 局部变量 在局部作用域下的变量
            //注意 函数的形参也是局部变量
            function fun() {
                //局部变量 函数外部不能使用
                var sum = 0;
                sum2 = 20;
            }
            // fun();
            console.log(sum2);
    
            //从执行效率来看全局变量和局部变量
            //1. 全局变量只有浏览器关闭时 才会销毁 比较占内存资源
            //2. 局部变量 当我们程序执行完毕 就会销毁 比较节约内存资源
        </script>
    </head>

    js没有块级作用域 但是在es6之后才有了块级作用域 比如OC或者Swift中的{}中声明的变量 作用域就是在花括号中 就是块级作用域。

    但是在JS中es6之前没有。

    3 作用域链

    只要是代码 就至少有一个作用域

    写在函数内部的局部作用域

    如果函数中还有函数 那么在这个作用域中又可以诞生一个作用域

    根据内部函数可以访问外部函数变量的机制 用链式查找决定哪些数据能被内部函数访问 就称为作用域链

  • 相关阅读:
    最长回文子串
    学习与提升
    jupyter notebook nginx 试听录音文件,网页试听
    【神经网络】batch、epoch、iteration的含义
    【tensorflow】Tensorflow入门教程
    最全BAT面试题
    打印二叉树
    基于argparser模块实现 ls 功能(基本实现)
    比较详细的argpasrse模块的基本使用
    ini文件转换为Json文件
  • 原文地址:https://www.cnblogs.com/huanying2000/p/12380878.html
Copyright © 2011-2022 走看看