JS的作用域和JS的数据类型

#JavaScript笔记

##作用域

一.全局作用域

1.编写在script标签中的代码都是在全局作用域的,其中使用var关键字声明的变量会被提前声明(这里的提前声明是指在js代码执行前)
  而不是使用var关键字声明的变量不会被提前声明,但是使用var关键字声明的变量还是在原来的位置被赋值,没有被赋值之前,调用的
  话他的值是undefined。

实例:
 var a = "global";
 function fun(){
 console.log(a);
 var a = "local";
 console.log(a);} 
 fun();

 这里不是预期的值  global local 而是 undefined local 因为在我们生成函数的时候,他是在所有代码之前就已经被执行了,所以
 并不是我们预期的顺序。而且前面提到var会被提前声明,这里在函数內部也不例外。所以代码可以写成以下:

实例:
var a = "global";
 function fun(){
 var a;
 console.log(a);
 var a = "local";
 console.log(a);} 
 fun();

JS数据类型

一.基本类型

 boolean  布尔值   
 string   字符串   
 number   数值  
 null     空(通常用来表示空一个对象)    
 undefined   声明但是没有赋值的变量
 Symbol(ECMAScript中新定义的类型)

二. 对象类型

 Object 在大多数的情况下,JS都是对象类型。

三.两者的区别

   1.储存的位置不同
   基本数据类型的值一般都是不变得,所以它都是存储在栈内存中的,这样它的调用就会很快,而且对程序的执行速度,
   也不会产生影响,而对象类型是存储在堆内存中的,因为它的大小会发生变化,存储在栈内存中会消耗大量内存资源,
   不方便调用。

  2.调用的方法不同
  在调用基本数据类型时,时直接调用的,而引用数据类型(也就是对象类型)时,时先找到引用数据类型存在栈内存中的
  内存地址,然后再通过这个地址区访问对象类型。再将变量赋值给另一个变量的时候能够很明显的发现两者的区别。

  实例:
  var a = 123;
  var b = a;
  var a = 456;
  console.log(a,b); // 456  123
  var c = new Array();
  c[0] = "贾玲";
  c[1] = "沈腾";
  var d = c;
  d[2] = "王宝强";
  console.log(c,d);  // ["贾玲", "沈腾", "王宝强"] ["贾玲", "沈腾", "王宝强"]

  这里我们不难看出来,基本数据类型的赋值,就是变量的赋值,两者没有任何的联系,而对象类型的赋值,是把对象类型在
  栈内存中的地址赋值给了另一个变量,所以两个变量指向堆内存中的同一个位置,两者一个发生变化,也会影响另一个发生变化。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值