码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript变量

时间:2019-05-03 22:39:57      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:ali   解析   影响   栈内存   top   访问   enter   res   原理   

一、变量

                  基本类型                        引用类型          
不可修改 可以修改
保存在栈内存中 保存在堆内存中
按值访问 按引用访问
比较时,值相等即相等 比较时,同一引用才相等
复制时,创建一个副本 复制的其实是指针
按值传递参数 按值传递参数
用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();

Javascript变量

标签:ali   解析   影响   栈内存   top   访问   enter   res   原理   

原文地址:https://www.cnblogs.com/Qxian/p/10781083.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!