目录
- ES6简介
- 对浏览器的内核的了解?有哪些内核?(重点6分)
- ES5和ES6有什么区别?(重点有时15分有时6分)
- 讲一讲ES6的版本怎么更新的?(问的少)
- let
- const
- 笔试题
- 块级作用域
ES6简介
- ES6,全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。
- 目前各大浏览器基本上都支持 ES6 的新特性,其中 Chrome 和 Firefox 浏览器对 ES6 新特性最友好,IE7~11 基本不支持 ES6。
1.IE浏览器内核:Trident内核,也是俗称的IE内核;
2.Chrome浏览器内核:统称为Chrome内核,以前是Webkit内核,现在是Blink内核;
3. Firefox浏览器内核:Gecko内核,俗称Firefox内核;
4. Safari浏览器内核:Webkit内核;
5. Opera浏览器内核:最初是Presto内核,后来是Webkit,现在是Blink内核
对浏览器的内核的了解?有哪些内核?(重点6分)
浏览器要渲染出网页给用户看,必须加载html编码和js脚本,渲染引擎渲染页面的UI和js执行引擎操作内存,就是浏览器的的重要组成程序:内核
根据不同的浏览厂商 他们使用了不同的内核, 内核的程序是很难实现的,根据我的了解有一些内核是公司自己实现的有一些是直接借用的,比如:
1、IE浏览器内核:Trident内核,也是俗称的IE内核;
2、Chrome浏览器内核:统称为Chromium内核或Chrome内核,以前是Webkit内核,现在是Blink内核;
3、Firefox浏览器内核:Gecko内核,俗称Firefox内核;
4、Safari浏览器内核:Webkit内核;
5、Opera浏览器内核:最初是自己的Presto内核,后来是Webkit,现在是Blink内核;
6、自己搜一搜国内出名:360 2345 夸克
7、渲染引擎
ES5和ES6有什么区别?(重点有时15分有时6分)
1.通过不同的语法作答(说服面试官 你新技术是会的)
2.准备几个技术点去讲:优化 性能 缺陷
3.自己去查一查ES6的更深一点的技术点(高薪意向的同学)
例:
- ES6新增了箭头函数,es5没有;
- ES6中新增了块级作用域,es5没有;
- ES6引入Class概念,不再像ES5一样使用原型链实现继承;
- ES6中可以设置默认函数参数,es5不行;
- ES6中新增了promise特性。
讲一讲ES6的版本怎么更新的?(问的少)
任何人都可以向标准委员会(又称 TC39 委员会)提案修改语言标准。
一种新的语法从提案到变成正式标准,需要经历五个阶段。
- Stage 0 - Strawman(展示阶段)
- Stage 1 - Proposal(征求意见阶段)
- Stage 2 - Draft(草案阶段)
- Stage 3 - Candidate(候选人阶段)
- Stage 4 - Finished(定案阶段)
let
let 声明的变量只在 let 命令所在的代码块内有效(块级作用域、局部作用域)
ES6 推荐在函数中使用 let 定义变量,而非 var。
- 只在代码块内有效
代码块:
obj={ } 对象
function(){ }函数
{ } , if(){ } ,for(){ } 代码块
//{}括起来的代码块
{
let x = 0;
var y = 520;
}
console.log(x); // 报错:a未声明
console.log(y); // 520
- 不能重复声明
var x = 1;
var x = 2;
console.log(x); // 2
let y = 3;
let y = 4;
console.log(y); // Identifier 'x' has already been declared
- 在for循环中很适用
for (var i = 0; i < 10; i++) {
setTimeout(function(){
console.log(i);
})
}
// 输出十个 10
for (let j = 0; j < 10; j++) {
setTimeout(function(){
console.log(j);
})
}
// 输出 0~9
- 不存在变量提升
console.log(aa); //undefined
var aa = 123;
console.log(bb);//Cannot access 'bb' before initialization
let bb = 234;
console.log(bb);
- 存在暂时性死区(TDZ):防止在变量声明之前就使用它
// typeof也不再是一个百分百安全的操作了
let cc = 111;
if(true){
console.log(typeof cc); //报错,不存在cc
let cc = 222;
}
const
- const 声明一个只读的常量,声明后常量的值就不能改只能用。
- 常量一旦声明就必须赋值
//const js的常量修饰符
//let var 修饰的变量的值可以被修改
const url="http://www.百度.com"
url=200 //报错
//其他语法同let
// 只能初始化一次:初始化--第一次赋值
笔试题
let a=90
if(true){
console.log(a)
var a=10
}
console.log(a)
//报错:不能声明相同的a
//原因:var a和let a均在全局作用域下
块级作用域
- ES5 只有全局作用域和函数作用域
不足:1. 内层变量可能会覆盖外层变量,用来计数的变量泄露为全局。
var a = 123;
function fn() {
//var a; //变量提升隐式声明
console.log(a); //undefined
if (true) {
var a = 345;
}
}
fn()
2. 用来计数的变量泄露为全局。
var str = 'hello';
for (var i = 0; i < s.length; i++) {
console.log(str[i]);
}
console.log(i); // 5 循环结束后,变量i并没有消失,泄露成了全局变量。
- let为 JavaScript 新增了块级作用域
块级作用域允许任意嵌套(内层可以使用外层变量,但外层不能使用内层变量)
{
let a = 123;
{
let b = 123;
console.log(a);
}
}
允许在块级作用域内声明函数。
函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
同时,函数声明还会提升到所在的块级作用域的头部。
//在ES5环境中
function f() { console.log('I am outside!'); }
(function () {
// function f() { console.log('I am inside!'); } //函数提升,不管if语句是否能执行
if (false) {
function f() { console.log('I am inside!'); }
}
f(); //I am inside!
}());
//在ES6环境中
function f() { console.log('I am outside!'); }
(function () {
if (false) {
function f() { console.log('I am inside!'); }
}
f(); // 报错 f is not a function
}());