第二章 变量和作用域

   在看第二章时我希望,你能够回想一下前一次所讲的内容  假设有所遗忘 点这里

 
 今天我们来说说 变量和作用域的问题

本章主要内容

  • 基本类型和引用类型
  • 运行环境
  • 垃圾回收(了解就可以)

基本类型和引用类型

JS中可能包括两种不同的数据类型的值:  基本类型  和 引用类型    基本类型值 指的是简单的数据段   而 引用类型指那些可能由多个值构成的对象。

怎样定义基本类型值和引用类型值呢?  看以下

创建一个变量并给它赋值就OK了。 
 对于引用类型我们能够加入 和删除它的属性和方法

var csdn = new Object();
csdn.blog = "Tomihaohao";
alert(csdn.blog) // Tomihaohao var name ="csdn";
name.age = 123;
alert(name.age) //undefined //相同的一段方式的代码为什么 结果不一样呢?

在JS中仅仅能给引用类型的值加入动态的属性


我们在看一段代码
var a =1;
var b = a;
alert(b);
//-------------------------------------
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "csdn";
alert(obj2.name) //"csdn" //知道上面两段代码在解析器里发生什么了吗?

两张图帮你解释清楚




  传递參数:
 
  还记得上一章讲的函数的參数吗?  我们来回想一下JS 中的函数 參数是非常灵活的,还记得arguments[] 吗? 假设你忘记了 点击这里

  今天我要在来说一说JS中的參数

 请记住 JS 中函数的參数都是按值传递的   
 
 还记得我上面画的图吗?  是的 把函数外部的值复制给函数内部的參数,就和把值从一个变量拷贝到还有一个变量一样

function addnum(param){
num +=10;
return num;
} var a = 10;
var b = addnum(a);
alert(a); //10
alert(b); //20 //看 他们两个是互不影响的

有人可能会疑问 拿要是引用类型还是这样吗? 


function setObj(obj){
obj.name = "csdn";
obj = new Object();
obj.name = "Tomihaohao"
} var T = new Object();
setObj(T);
alert(T.name);
//是什么呢? 没错依旧是csdn
//实际上这个局部对象,在函数运行完后就被kill了

新的工具 instanceof



记得上一章给大家介绍了一个 type of sth  对 就是 typeof 这个工具

可是 假设你遇到了引用类型又该怎么办呢?由于typeof 返回的都是object.

这里给大家介绍 instanceof   详细的使用方法也非常easy

var person = []

alert(person instanceof Array)
//person 是 Array对象吗? 当然是!

运行环境和作用域

在javascript 中最重要的一个概念:运行环境!
  • 运行环境定义了变量和函数有权訪问的其它数据,决定了它们各自的行为
  • 每一个运行环境都有一个与之关联的 变量对象
  • 在浏览器中 window 对象是全局运行环境,它们仅仅有在应用退出时才干销毁
  • 每一个函数都有自己的运行环境
  • 代码在一个环境运行时,会创建对象变量的一个作用域
  • 标识符解析是沿着作用域一级一级的搜索标识符的过程
var color = "white";
function changeColor(){
var anotherColor = "red"; function swapColors(){
var tempColor = anotherColor;
anotherColor = color;
color = tempColor;
//这里能够訪问 color anotherColor tempColor
} swaoColors();
//这里能够訪问color anotherColor } changeColor();
//仅仅能訪问到color

上面的代码一共同拥有三个运行环境,各自是全局环境 changeColor() 局部环境  swapColors() 局部环境,全局环境中有一个变量 color 而在 changeColor()中 有 anotherColor这个变量和 swapColors()这个函数,在swapColors()中有一个tempColor,至于为什么有的地方訪问不到呢?


作用域链就是,内部环境能够通过它去訪问全部外部环境,但反过来确实不行的,每一个环境都能够向上搜索作用域链,来查询变量和函数,可是他们不能向下搜索

记住JS中没有块级作用域

javascript 和 C JAVA C#不一样他是没有自己的块级作用域的,当然你能够通过一些方法来模拟,这个我们后面会讲到。

for(var i =0 ;i<10;i++)
{
console.log(i);
}
alert(i); //i=10

假设是JAVA 那么变量i会被马上销毁,但在JS中呢!依旧存在


js 中查询标识符


var color ="blue";

function getColor(){
//var volor ="red";
return color;
}
alert(getColor()) //blue //假设去掉 getColor()中的凝视 那么返回的就是red

没错,在js中 标识符会沿着作用域逐级的网上搜索,直到找到为止


浏览器中的GC 垃圾回收

事实上这里大家仅仅要知道一个概念即可了,那就是  解除引用。

一旦数据不再实用,最好将其设置为null来释放其引用

//向这样

var a ="csdn ";

//没用啦

a = null
//解除引用

总结

  • 从一个变量拷贝到还有一个变量的 详细过程,会创建这个值的副本
  • 引用类型的值是对象,保存在堆内存中
  • 引用类型值的变量事实上是一个指针
  • 引用类型的复制实质上是复制了一个指针他们同一时候指向同一个对象
  • 学习了新的工具instanceof
  • 学习了作用域链
  • 了解了GC




javascript小白学习指南1---0的更多相关文章

  1. javascript小白学习指南0---1

    引言: 做为一名程序猿.都是真心的想把自己的东西分享出来,供大家一起学习探讨.一起提高技能.一起涨工资,呵   这一系列的文章都是关于Javascript 基础的 当然文章其中穿插了些我自己的理解.希 ...

  2. javascript立体学习指南

    javascript立体学习指南第一章:首先了解javascript 首先,什么是javascript? JavaStrip出生于1995年,是一种文本脚本语言,成都装修公司是一种动态的.弱类型的.基 ...

  3. JavaScript每日学习日记(0)

    8.10.2019 1.JavaScript能改变HTML内容.属性.样式,能隐藏或显示HTML元素. 2.JavaScript函数可以任意数量被放置在<body>.<head> ...

  4. 最棒的 JavaScript 学习指南(2018版)

    译者注:原文作者研究了近2.4万篇 JavaScript 文章得出这篇总结,全文包含学习指南.新人上手.Webpack.性能.基础概念.函数式编程.面试.教程案例.Async Await.并发.V8. ...

  5. web前端学习:JavaScript学习指南

    JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  6. 学习javascript,您将发现以下两个学习指南

    学习javascript,您将发现以下两个学习指南,一个是初学者的,另一个是茄子一号经验丰富的程序员和Web开发人员的.你想学习javascript并对它有兴趣.我想这就是你来这里的原因,你做了一个明 ...

  7. 大量Javascript/JQuery学习教程电子书合集

    [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人   不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pd ...

  8. [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人

    不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pdf 274.79 KB   21天学通JavaScript(第2版)-顾宁燕扫描版.pdf ...

  9. Java工程师学习指南 完结篇

    Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...

随机推荐

  1. 使用js获取url中的get参数并转成json格式

    写在前面的 没啥说的 上代码 思路就是先获取到?后面的参数区,然后 利用字符串转数组方法获取到各个参数 var json = {}; var url = 'https://www.baidu.com/ ...

  2. PHP通过DOM操作XML

    PHP XML操作类DOMDocument属性及方法 注意大小写一定不能弄错. 属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataT ...

  3. HDU-4370 '0 or 1' 最短路 要考虑连通性

    题目链接:https://cn.vjudge.net/problem/HDU-4370 题意 给一个矩阵C(nn),要我们找到一个矩阵X(nn),满足以下条件: X_{12}+X_{13}+...X_ ...

  4. [APIO2014]回文串(回文自动机)

    题意 给你一个由小写拉丁字母组成的字符串 s.我们定义 s 的一个子串的存在值为这个子串在 s 中出现的次数乘以这个子串的长度. 对于给你的这个字符串 s,求所有回文子串中的最大存在值. |S|< ...

  5. jQuery第二课 点击弹出一个提示框

    选择器允许您对元素组或单个元素进行操作. jQuery 选择器 在前面的章节中,我们展示了一些有关如何选取 HTML 元素的实例. 关键点是学习 jQuery 选择器是如何准确地选取您希望应用效果的元 ...

  6. 教你用webpack搭一个vue脚手架[超详细讲解和注释!]

    1.适用人群 1.对webpack知识有一定了解但不熟悉的同学. 2.女同学!!!(233333....) 2.目的 在自己对webpack有进一步了解的同时,也希望能帮到一些刚接触webpack的同 ...

  7. 【codeforces 29B】Traffic Lights

    [题目链接]:http://codeforces.com/problemset/problem/29/B [题意] 一辆车; 让从A开到B; 然后速度是v; (只有在信号灯前面才能停下来..否则其他时 ...

  8. 2015 Multi-University Training Contest 3 hdu 5316 Magician

    Magician Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  9. less06 引入(importing)

    main.less @wp:960px; .colorsss{ color: darkgreen; } index.css .color{ color: #ff6600; } style.less / ...

  10. 图解时间复杂度O(n)

    画一个16个格子.大O表示计算的操作数. 算法1 需要16步. 算法2 算法1的时间复杂度为O(n) 算法2的时间复杂度为O(logn) n为元素个数16 O中的内容为操作的次数 5种常用的时间复杂度