掌握这些主题,你就能成为 JavaScript 面试高手 - 第一部分
您从训练营毕业或开始参加计算机科学课程,您发现自己对 Web 开发有这方面的兴趣,并且您知道 JS 是 Web 语言。
你作为前端开发人员工作了将近一年,一切都很好,但 JS 有点吓人,你遇到了一个 bug,你去 StackOverflow 问“顺便问一下,这到底是什么意思?”你心想,你已经成功地把所有东西都拼凑起来了,现在一切正常。你问自己:什么时候我才能有信心,像老板一样,在一家大公司工作,并顺利通过 JS 面试?
涵盖这些主题,即使现在知道它们的存在,也意味着你朝着一个很好的方向发展,这不仅是为了你的日常工作,也是为了性感的面试问题,有人可能会说面试官用它们只是为了炫耀。
1.范围:
作用域就是你可以根据代码当前的位置访问和使用的变量。
作用域是层层叠加的,就像一摞盘子。当你启动一个具有作用域的 JS 文件时,你可以称之为全局作用域;现在你定义了一个函数,它有一个局部作用域,并且会在栈顶添加一个盘子。
位于函数局部范围(又称堆栈顶部)的指令“例如:console.log()”可以在全局范围内访问其下方的内容,但如果您在函数内部定义了一个变量,则只能从函数的范围访问它。
如果在函数内部有一个函数,并且您请求了一个变量的值,JS 会首先在当前作用域内搜索,如果没有找到,则会在堆栈中逐个向下移动,回到全局作用域,如果没有找到变量,则会抛出“Uncaught ReferenceError:... 未定义”,这就是我们所说的作用域链。
2.吊装:
JS 就像魔术一样,嗯,它不像任何编程语言那样,它有要执行的步骤,编译器会读取你的代码并将其转换为机器代码。
JS 运行经过多个阶段,它会创建所有变量声明的副本(没有值),暂时赋予它“未定义”,然后有一个执行阶段,其中变量被赋予值,这就是为什么 JS 中的变量是值类型的,var 可以是数字、字符串、对象或任何其他类型。
你可以想象一下代码提升,就好像每次你写“var foo = 5;”时,页面顶部都会出现“var foo;”,然后你稍后会将其赋值给 5,这就是为什么你可以在代码行前写“console.log(foo);”,这样就不会出现“ReferenceError: foo is notdefined”错误。它只会显示“undefined”,这意味着它还没有值。
函数声明也会提升到顶部,在声明函数之前,用“()”运行一个函数来测试一下,应该可以正常工作。
3.Var、Let 和 Const 的区别:
既然我们已经了解了作用域和变量提升的概念,现在我们来探讨一个你可能会被问到的热门 JS 面试题:在变量定义中,Var、Let 和 Const 有什么区别?
我们先来比较一下 var、let 和 const:
var 是经典的方式,在 ES2015(又名 ES6)引入 let 和 const 之前就已经存在了,而 ES6 每年都会更新我们喜爱的 JS。
那么区别是什么呢?var 会进行提升,如果你在定义 var 变量之前先调用它,它会返回 undefined,而 let & const 则会抛出 ReferenceError。这只是一方面,幸好我们先完成了提升!
另一个区别是 var 是函数“或本地”范围,一个很好的例子是,如果你有一个函数和一个 for 循环,
如果你用“var i = 0;”在 for 循环头中定义迭代器“i”,你会发现如果你在 for 循环之外调用它,你仍然可以将“i”视为“未定义”。
let 和 const 不会那样做,它们是块作用域,意味着每个花括号,包括 for 循环中的花括号或像 if/else 这样的条件,都是一个范围,你不能在它之外调用这些变量。
既然我们已经了解了这两个变量的区别,那么为什么是 let 而不是 const 呢?
“let”允许你先定义一个变量,然后再赋值给它。即使赋值成功,你也可以在之后修改它,而“const”则不允许你这么做。
它赋予了常量不可被覆盖的功能,如果你在编写一个大文件时忘记了之前已经用这个名字命名过一个变量,然后花了一整天的时间思考为什么这个变量的值会不一样,那么 let 就非常方便了。
我希望这对您有所帮助,如有任何反馈或疑问,请随时与我联系。
待续...
文章来源:https://dev.to/gurutobe/covering-these-topics-increases-your-chances-to-get-a-job-as-a-javascript-engineer-part-1-18ki