• Javascript变量


    一、变量

                      基本类型                        引用类型          
    不可修改 可以修改
    保存在栈内存中 保存在堆内存中
    按值访问 按引用访问
    比较时,值相等即相等 比较时,同一引用才相等
    复制时,创建一个副本 复制的其实是指针
    按值传递参数 按值传递参数
    用typeof检测类型 用instanceof检验类型

       基本类型复制时,创建一个副本,对副本的操作与原来的值不相干的,引用类型的复制其实是指针,这样子新的变量指向的就是同一个东西了,这样子你对某一个变量进行操作,其实是会影响另一个变量的。

    二、作用域

      1. 作用域有全局作用域和局部作用域之分。

      2. 作用域链是用来查询变量的(由内往外)

      3. JS解析机制

          a.预解析

          b.逐行解析

    (1)把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。

    (2)把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。

    (3)先提升 var,在提升 function

         因此我们定义函数时,绝大数使用第一种方式(函数声明的方式)

         当匿名函数多于定时器里面和注册事件的时候,比如:

         <script>

                btn.onclik = function(){

                      console.log("这是一个匿名函数”);

                }

         </script>

         2.预解析示例:

         <script>

                 var num = 789;

                 function fn(){

                       console.log(num);

                       var num = 789;

                 }

                 fn();

         </script>

          此时控制台打印的是undefined,原因是:JS解析代码时,把函数的声明还有变量的声明提升到当前作用域的最前面,所以代码就变成:

          <script>

                 var num;

                 num = 789;

                 function fn(){

                      var num;

                      console.log(num);

                      num = 789;

                 }

                fn();

          </script>

    三、自执行函数

           (1)第一种写法

                   <script>

                        (function(){

                              console.log("这是一个自执行函数");

                         })();

                   </script>

                  这样写的原理是:由函数表达式演变过来的,var fn = function(){}fn(); 把fn替换为:function(){},就成了:function(){}(); 为了保持整体性,在function加上一个(),所以就变成了(function([这里是形参]){}) ([这里是实参])

                 (2)第二种写法

    、              <script>

                           (function(){

                                  console.log("这是一个自执行函数");

                           }());

                     </script>

    四、闭包

           对于闭包,当外部函数返回之后,内部函数依然可以访问外部函数的变量。

           function f1(){

                 var N = 0; 

                 function f2(){

                       N += 1;

                       console.log(N);

                 }

                 return f2;

           }

          var result = f1();

          result();

          result();

          result();

  • 相关阅读:
    VS Code 快捷键(中英文对照版)
    一些网络资源
    VS Code插件
    Angular for TypeScript 语法快速指南 (基于2.0.0版本)
    Angular2 中的依赖包详解
    《ECMAScript 6 入门》阮一峰
    《JavaScript 标准参考教程》阮一峰
    Angular内提供了一个可以快速建立测试用web服务的方法:内存 (in-memory) 服务器
    由angular命令行工具(angular-cli)生成的目录和文件
    Angular 4.x 修仙之路
  • 原文地址:https://www.cnblogs.com/Qxian/p/10781083.html
Copyright © 2020-2023  润新知