目录
运算符与语句
面试题: 优雅降级,渐进增强
渐进增强:在网页开发中,渐进增强认为应该专注于内容本身,一开始针对低版本的浏览器构建页面,满足最基础功能后,再针对高级浏览器进行效果交互,追加各种功能以达到更好的用户体验;即以最低的要求实现最基本的功能,向上兼容
优雅降级:指一开始针对高版本/高级浏览器进行页面构建,先完善所有功能后,再针对各个不同的浏览器进行测试,修复,保证低版本浏览器也有进本功能;即以高要求,高版本浏览器为准,向下兼容
两者的区别:
a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给
b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要
c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。
1、箭头函数
(1)箭头函数定义
箭头函数提供了一种更加简洁的函数书写方式。基本语法是:
参数 => 函数体 (参数) => {函数体}
基本语法:箭头函数只有定义式,没有声明式
//普通函数 var f = function(a){ return a; } f(1); //1 //箭头函数 只有一个参数可以省略小括号 var f = a => a f(10); //10
当箭头函数没有参数或者有多个参数,要用 () 括起来。函数体内只有一句,大括号可以省掉
var f = (a,b) => a+b; //var f = (a,b) => {return a+b} //这个和上一排一样的 f(6,2); //8
当箭头函数函数体有多行语句,用 {} 包裹起来,表示代码块,当只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回。
var f = (a,b) => { let result = a+b; return result; } f(6,2); // 8
当箭头函数要返回对象的时候,为了区分于代码块,要用 () 将对象包裹起来
var f = (id,name) => ({id: id, name: name}); f(6,2); // {id: 6, name: 2}
注意点:没有 this、super、arguments 和 new.target 绑定。
this就是 离它最近 的嵌套级别的function或者方法的调用者,如果没有,就是window
var obj ={say:() => { // 箭头函数里面没有 this 对象, // 此时的 this 是外层的 this 对象,即 Window console.log(this); //window }} obj.say(11); var b = () => { console.log(arguments); } b(111); // ReferenceError: arguments is not defined
以下情况:对象中使用箭头函数,this表示全局Window对象
var obj = { name: "xx", show: function() { console.log(this); //this表示当前对象 }, say: () => { console.log(this); //this表示全局window对象 } }
箭头函数体中的 this 对象,是定义函数时的对象,而不是使用函数时的对象。
function a() { setTimeout(function() { console.log(this); //this始终指向全局Window对象 }, 100) } a.call({num: 200}); function b() { setTimeout(() => { console.log(this); //this绑定的是b函数中的this对象 }, 100); } b.call({num: 300});
注意:箭头函数不可以作为构造函数,不能用作创建对象,也就是不能使用 new 命令,否则会报错
function Person() { console.log(this); } new Person(); //Person {} var People = ()=>{ console.log(this); } new People(); //TypeError: People is not a constructor