js基础

js基础

javascript 简称为JS 它是一门编程语言

js中的变量

  • 变量:变量就是内存中的一个空间。
    变量名:内存空间的别名 对变量名的操作就是对内存空间的操作
    变量值:存储在内存空间中的状态(数据)

var a = 110; // 定义了一个变量 变量的名是a 变量的值是110;

  • 只要把变量写在函数里面就是局部变量,只要写在函数外面就是全局变量。

1)全局变量可以在函数内部都能访问到
2)局部变量只能在函数内部访问到

 // 全局变量
    var address = "郑州";
    // 定义函数 函数必须通过函数进行声明
    function f() {
        // 函数内部的变量叫局部变量
        var m = 111; // 局部变量
    }
    if(true){
        var k = 123; // 全局变量
    }
    for(var i=0; i<10; i++){  // i全局变量
        var o = 666; // o是全局变量
    }

基本语法

1)JS是区分大小写 var a = 1; var A = 2;
2)忽略空白符(空格 换行 tab)
3)语句分号可加可不加
4)注释 单行注释 多行注释 注释是给程序员看的
5)标识符 和 关键字 var a = 110; var 关键字 a变量名标识符
6)…

  • 数据类型

基本数据的类型:
number 数字 var a = 110; int a = 110;
string 字符串 ”“ ‘’ JS中不分字符和字符串 都叫字符串
boolean true false 布尔类型
undefiend 没有值
null 没有值

引用数据类型:
object 对象
array 数组
function 函数 在JS中函数也是一种数据类型

在JS中,运算符两侧需要保存数据类型一致,如果不一致,JS解释器会帮你把一个数据类型转成另一个数据类型。

 双元运算符你要保证两侧操作数的数据类型要一致
    var res = 123 + "abc";  // 123隐式转化成字符串
    console.log(res);  // 123abc
    console.log(typeof res);  // string
 强制类型转化
    console.log(parseInt(3.14)); // 把小数转成整数
    console.log(parseInt("3.14abc")); // 尝试把小数或非数字转成整数
    console.log(parseFloat(3))
    console.log(parseFloat("3.14abc"))
    console.log(Number("abc123"))  // NaN
    console.log(Number("123abc"))  // NaN
    console.log(Number("123"))  // 123
    console.log(String(123456))  // 123456

JS代码的执行

  • 1)预编译
  • 2)代码执行

预编译: 提升
把加var的变量进行提升 变量声明会提升 变量的赋值是不会提升
提升到了代码段最前面
把使用function声明的函数进行提升 提升的是整个函数声明

  • 在判断判断中,如果有函数,此函数在预编译期间并不会直接 提升到代码段的前面,仅仅是提升了函数名也就是说仅仅是提升了函数的声明,也就是提升了fn
console.log(fn); // 打印出的是堆上的函数体
    window.fn();  // fn...
    console.log(window.fn) 
    fn(); // fn...
    if("fn" in window){
        fn(); // fn...
        function fn() {
            console.log("fn...")
        }
    }
    fn();  // fn...
  • 在判断判断中,如果有函数,此函数在预编译期间并不会直接,提升到代码段的前面,仅仅是提升了函数名,也就是说仅仅是提升了函数的声明,也就是提升了fn
console.log(fn); // 函数名提升到最前面  打印出来的是und
  // window.fn();
  console.log(window.fn); // undefined
  // fn(); // fn...
  if("fn" in window){  // fn是全局函数 也会挂载到GO上
      // 如果条件满足,进入到条件里面的第1件事就是给fn赋值
      // fn 此时就已经是一个函数了
      fn();  // fn...
      function fn() {
          console.log("fn...")
      }
  }
  fn(); // fn...
执行上下文( Execute Context)
  • 全局执行上下文:
    全局代码在执行时时,就会产生全局的EC。 EG(G)

  • 局部执行上下文:
    函数代码在执行时,就会产生局部的EC。调用一个函数就产生一个EC,调用100个函数,就产生100个EC。

  • ECStack 执行上下文栈
    EC(G) 全局执行上下文 存储全局的加var 加function的数据存储在VO中

  • VO 变量对象 存储的全局的加var 或 加function
    EC(f) 函数执行上下文 存储局部的加var 或 加funciton的局部数据

  • AO 活动对象 存储局部的加var 或 加function的局部数据

  • GO 全局对象
    默认情况下,里面就存储了很多东西
    全局的数据,加Var的全局数据,加functon的全局数据,不加var的变量都会存储到GO中的在这里插入图片描述
    在这里插入图片描述

  • 加var与不加var的区别

1)在全局代码中,加var会提升,没有var的不会提升。

console.log(a);
a = 110;  // a is not defined

2)不管加没加var的全局变量,都会作为window的属性

  var a = 1;
  b = 2;
  console.log(window.a)
  console.log(window.b)

3)没有加var的变量,只能作为全局变量,只要是全局变量,肯定是window的属性

 function f() {
     a = 666;
 }
 f()
 console.log(window.a)

4)加var的局部变量,不会作为window的属性

 function f() {
    var a = 666;
   }
 f()
 console.log(a)
   // 访问一个对象上不存在的属性,结果就是und
console.log(window.a) // undefined
  • let
  1. 声明的变量不提升
  2. 配合{ }形成块级作用域
  3. let声明不会挂到GO上
  4. 使用let不能重复声明
  • const
  1. 声明一个常量,不提升
  2. ~4.同上
  3. 声明的常量必须赋值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值