[js]js中变量带var和不带var的区别

上图已说的很清晰了. 下面代码是赘述

<script>
    //带var和不带var的区别:

    // 1.只有带var的才可以预解释,所以在赋值的前操作不会报错.
    console.log(num); //undefined
    var num = 100;

    // 2.不带var的不会进行预解释,赋值前调用会报错,
    console.log(num2); //Uncaught ReferenceError: num2 is not defined
    num2 = 200;

    // 3. 本质区别:
    //    - 1)带var相当于给window 增加了一个num3属性,属性值是12
    //    - 2)给全局作用域增加了全局变量
    console.log(num3); //12 windows.num3
    console.log(window.num3);
    var num3 = 12;

    //    - 不带var 仅仅相当于给window 增加了一个num3属性,属性值是12
    num4 = 12;
    console.log(num4); //可以不用写window.
    console.log(window.num4); //  windows.num3,

</script>

原文地址:https://www.cnblogs.com/iiiiiher/p/8416922.html

时间: 2024-11-10 10:33:53

[js]js中变量带var和不带var的区别的相关文章

js代码中的parent,top和self有什么区别

1.parent常用在iframe和frame中的子页面访问父页面中的对象 2.top :一个页面可能会有很多层,top是指最顶层的框架 3.self :是指当前窗口

js中变量名提升和函数名提升

首先,js中变量没有块级作用域,但是有函数作用域,即只有函数可以约数变量的作用域. 并且,函数的实质也是一个变量,所以可以改变它的值,即赋值.所以变量名提升和函数名提升非常相像. 1.变量名的提升发生在函数内部.看下面的例子.说明:第一个因为弹出undefined,相当于在上面定义了var num;因为函数内部,定义了var num=20:就相当于在一开始定义了var num;这就是变量名的提升. var num = 10; function func() { alert(num); //und

关于js中变量声明和作用域的理解

1. var是声明一个变量:虽然声明了这个变量,但在存入值之前,它的初始值是 undefined:2.全局变量:拥有全局作用域,在js代码中的任何地方都是有定义的:3.局部变量:在函数内声明的变量只在函数内有定义,作用域是局部的,只在函数内有定义:4.全局作用域编写代码时可以不写var,但声明局部变量时必须使用var语句;5.在函数体内,局部变量的优先级高于同名的全局变量.如果局部变量和全局变量同名,那么全局变量会被局部变量所遮盖:但全局变量的值不会改变:6.作用域链查找规则:自上而下(一个或多

js中变量的声明

大家都知道js中变量的声明是要提前的,以下有4个例子: 1.if(!"t" in window){ var t = 1; } alert(t);答案是undefined,为什么呢,就是因为变量声明提前了,所以t是在window对象里面的,但是没有走下面的判断,所以并没有赋值,答案就是undefine 2.var num = 100; function fn(){ var num = num + 1; return num; } falert(n());答案依然是NaN,因为在函数体内部

使用javax.script包实现Java设置JS脚本中的变量

下面例子中,我们通过javax.script包ScriptEngine.put()方法设置JS脚本中的变量,JS把所有在线用户输出. package ajava.code.javase; import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; import java.util.Date; public class AjavaAcc

关于js语法中的一些难点(预解析,变量提前,作用域)

******标题很吓人************ 其实就是一个小例子 ,从例子中浅析 这些知识点 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>关于js中的那些小知识点</title> </head> <body> </body> <script> var a=1; function zero

js中变量含(参数、数组)作用域传递问题

js没有块级作用域(你可以自己闭包或其他方法实现),只有函数级作用域和全局作用域,函数外面的变量函数里面可以找到使用,函数里面的变量外面无法访问到. 写这个是因为ES6中的一个例子开始的.首先看下例子 var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10 var a = []; for (let i = 0; i < 10; i++) { a[i] =

css文件中的样式类被覆盖,js文件中的变量未定义问题问题

Extjs控件中css样式表中的样式类部分被莫名其妙的覆盖 问题原因: 为什么呢? 因为在调用组件W的css样式时,我们自己写了css样式A,Ext组件又自带css样式B,A是我们用cls:'A'放进去.那么这个W到底是用两个样式重复的哪一个种呢? 这就要看css样式表的引入顺序了,如果先引入自己写的,再引入Ext自带的,那么浏览器先读自己写的css样式,然后再读Ext自带的样式.结果我们的自己写的css样式就被覆盖了. 解决办法: 这样就对了. js文件中的变量未定义问题 问题描述: read

JS中变量的存储

JS中的变量是保存在栈内存中的 基本数据类型的值直接在栈内存中存储: 值与值之间是独立存在的,修改一个变量不会影响其他变量: var a=20; var b=a; a++; 对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟一个新的空间: 而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个变量修改属性是,另一个也会受到影响: var obj1=new Object(); obj1.name="mike"; var obj2=obj1; o