面试官竟然问我JavaScript中var、let和const有什么区别?

在JavaScript中有三种声明变量的方式:var、let、const。

目录
1.var

  1. let
  2. const
    1.var
    (1)var定义的变量在之后可以修改,如果不初始化会输出undefined,不会报错。

var a;
console.log(a); // undefined
// -----------------------------
console.log(a); // undefined
var a = 1;
1
2
3
4
5
(2)var定义的变量,可以跨块访问, 不能跨函数访问。

(3)var只有函数作用域,没有块级作用域。

(4)var的作用域是函数作用域,var可以用来声明全局变量,也可以声明局部变量。在一个函数内利用var声明一个变量,则这个变量只在这个函数内有效。

全局变量:在函数外定义的变量,作用域是整个代码文件。
局部变量:在函数内定义的变量,作用域是当前的函数内部。
var a = 666;
console.log("函数外var定义a:" + a); // 函数外var定义a:666
利率决议 http://www.gendan5.com/decision/jpy.html
function cg(){
a = 888;
console.log("函数内var定义a:" + a);// 函数内var定义a:888
}

cg();
console.log("函数调用后var定义a为函数内部修改值:" + a);
// 函数调用后var定义a为函数内部修改值:888
1
2
3
4
5
6
7
8
9
10
11
(5)可以重复定义,后面的值会覆盖前面的。

var a = 1;
var a = 2;
console.log(a); // 2
1
2
3

  1. let
    (1)let是块级作用域,函数内部使用let定义后,对函数外部无影响。

let a = 666;
console.log("函数外let 定义a:" + a); // 函数外let 定义a:666

function cg(){
let a = 888;
console.log("函数内let 定义a:" + a);// 函数内let 定义a:888
}

cg();
console.log("函数调用后let 定义a为函数内部修改值:" + a);
// 函数调用后let定义a为函数内部修改值:666
1
2
3
4
5
6
7
8
9
10
11
(2)不存在变量声明提前,否则会报错。

console.log(a);
let a = 1;
1
2

(3)let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。

var c=11;

{
let c=12;
console.log(c);// 12
}
console.log(c);// 11
1
2
3
4
5
6
(4)不能重复定义,否则会报错。

let a = 1;
let a = 2;
console.log(a);
1
2
3

  1. const
    (1)const定义的变量不可以修改,而且必须初始化。

const b = 2;// 正确
const b; // 错误,必须初始化
1
2
(2)const一般用来声明常量,且声明的常量是不允许改变的,为只读属性,因此就要在声明的同时赋值。

(3)const与let一样,都是块级作用域,只能在块作用域里访问,存在暂时性死区,不存在变量声明提前,不允许重复定义。

const b = 2;
const b = 2;
console.log(b);
1
2
3

原文地址:https://blog.51cto.com/14513127/2481778

时间: 2024-11-05 23:36:04

面试官竟然问我JavaScript中var、let和const有什么区别?的相关文章

我说精通字符串,面试官竟然问我 Java 中的 String 有没有长度限制?

String 是 Java 中很重要的一个数据类型,除了基本数据类型以外,String 是被使用的最广泛的了,但是,关于 String,其实还是有很多东西容易被忽略的. 就如本文我们要讨论的问题:Java 中的 String 有没有长度限制? 这个问题要分两个阶段看,分别是编译期和运行期.不同的时期限制不一样. 01 编译期 首先,我们先来合理的推断一下,当我们在代码中使用 String s = ""; 的形式来定义 String 对象的时候,"" 中字符的个数有没

js基础面试高频面点2:Javascript中undefined和not defined有什么区别?

二.Javascript中undefined和not defined有什么区别? 一句话:udefined为变量正常的数据类型,不是报错,而not defined是指变量没有定义,是报错. 那么,什么是数据类型?js中数据类型有哪些? 数据类型在数据结构中的定义是一组性质相同的值的集合以及定义在这个值集合上的一组操作的总称. js中变量的数据类型有: 值类型(基本类型):字符串(String).数字(Number).布尔(Boolean).对空(Null).未定义(Undefined).Symb

【深度】扒开V8引擎的源码,我找到了你们想要的前端算法(下次面试官再问算法,用它怼回去!)

算法对于前端工程师来说总有一层神秘色彩,这篇文章通过解读V8源码,带你探索`Array.prototype.sort`函数下的算法实现. 来,先把你用过的和听说过的排序算法都列出来: * 快速排序 * 冒泡排序 * 插入排序 * 归并排序 * 堆排序 * 希尔排序 * 选择排序 * 计数排序 * 桶排序 * 基数排序 * ... 答题环节到了, sort 函数使用的以上哪一种算法? 如果你在网上搜索过关于 sort 源码的文章,可能会告诉你数组长度小于10用插入排序,否则用快速排序. 开始我也是

MVCC和间隙锁,面试官的问法

你在项目中用到事务了吗,如果你对表中的数据进行了两次操作, 1 更新表中的数据 成功 2 删除表中的数据 失败 那么请问 你更新能成功吗. 菜鸡本菜的回答:事务的原子性 导致不会成功. 大佬说(非面试官):这个应该是面试官要问你间隙锁.  通过版本号来标记,不存在删除数据的操作,只是版本号无效. 理论: MVCC和间隙锁 多版本并发控制(Multi-VersionConcurrency Control,Mvcc)是mysql的InnoDb存储引擎实现隔离级别的一种具体的方式, 用于实现读已提交和

如果大厂面试官突然问你FactoryBean+Bean你究竟会多少?

如果大厂面试官突然问你FactoryBean+Bean你究竟会多少? 很多Java程序员都在绞尽脑汁的想要进互联网大厂,那进入大厂必备的条件也是大家最想知道的,有很多大厂在面试的过程中会提一些不那么常见的问题,所以我们在去大厂面试的时候就需要提前做好准备. 如果大厂面试官突然问你FactoryBean+Bean你会怎么回答呢? package com.example.demo10.entity; //实体 public class Stu { String name; public Stu(St

javascript中apply、call和bind的区别,容量理解,值得转!

a)  javascript中apply.call和bind的区别:http://www.cnblogs.com/cosiray/p/4512969.html b)  深入浅出 妙用Javascript中apply.call.bind   http://www.admin10000.com/document/6711.html ====================================================== 在JS中,这三者都是用来改变函数的this对象的指向的,他们

javascript中三目运算符和if else有什么区别

javascript中三目运算符和if else有什么区别今天写了一个图片轮播的小demo,用到了判断先试了一下if else,代码如下:if(n >= count-1){n =0;}else{n ++;}随后代码写完了,准备优化一下代码,将此段改成了三目运算符的写法n = n >= (count-1) ? n=0 : n++结果完全不同随后研究了一下这两者的区别,总结为一句话:三目运算有返回值,if else没有返回值做了如下测试:var n=1; if(n>1){ n=0;}else

JavaScript中event的x,clientX,offsetX的区别

JavaScript中event的x,clientX,offsetX的区别 请看下面的文字说明,也就是event中x,clientX,offsetX,screenX的区别: x:设置或者是得到鼠标相对于目标事件的父元素的外边界在x坐标上的位置.www.mlybyby.com clientX:相对于客户区域的x坐标位置,不包括滚动条,就是正文区域. offsetx:设置或者是得到鼠标相对于目标事件的父元素的内边界在x坐标上的位置. screenX:相对于用户屏幕. 同时你可以对比下面代码分析 Cl

面试官一问一答的面试题

1,请问你平常用什么浏览器调试? 谷歌,火狐 ,偶尔调试的时候用IE  偶尔会使用下国产的浏览器 问:请说下火狐浏览器,360的浏览器的内核   没听错就是360浏览器 IE浏览器内核:Trident内核,也是俗称的IE内核:Chrome浏览器内核:统称为Chromium内核或Chrome内核,以前是Webkit内核,现在是Blink内核:Firefox浏览器内核:Gecko内核,俗称Firefox内核:Safari浏览器内核:Webkit内核:Opera浏览器内核:最初是自己的Presto内核