35道面向初中级前端的基础面试题,讲的真详细

return function(…args2) {

return curry(fn, …args1, …args2)

}

}

function add(a, b) {

return a + b

}

console.log(curry(add, 1)(2)) // 3

console.log(curry(add, 1, 2)) // 3

16. 使用Ajax的优缺点分别是什么

优点
  • 交互性更好。来自服务器的新内容可以动态更改,无需重新加载整个页面。

  • 减少与服务器的连接,因为脚本和样式只需要被请求一次。

  • 状态可以维护在一个页面上。JavaScript 变量和 DOM 状态将得到保持,因为主容器页面未被重新加载。

  • 基本上包括大部分 SPA 的优点。

缺点
  • 动态网页很难收藏。

  • 如果 JavaScript 已在浏览器中被禁用,则不起作用。

  • 有些网络爬虫不执行 JavaScript,也不会看到 JavaScript 加载的内容。

  • 基本上包括大部分 SPA 的缺点。

参考资料:

17. Ajax和Fetch区别

  • ajax是使用XMLHttpRequest对象发起的,但是用起来很麻烦,所以ES6新规范就有了fetch,fetch发一个请求不用像ajax那样写一大堆代码。

  • 使用fetch无法取消一个请求,这是因为fetch基于Promise,而Promise无法做到这一点。

  • 在默认情况下,fetch不会接受或者发送cookies

  • fetch没有办法原生监测请求的进度,而XMLHttpRequest可以

  • fetch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理

  • fetch由于是ES6规范,兼容性上比不上XMLHttpRequest

18. 变量提升

var会使变量提升,这意味着变量可以在声明之前使用。let和const不会使变量提升,提前使用会报错。

变量提升(hoisting)是用于解释代码中变量声明行为的术语。使用var关键字声明或初始化的变量,会将声明语句“提升”到当前作用域的顶部。 但是,只有声明才会触发提升,赋值语句(如果有的话)将保持原样。

19. 使用let、var和const创建变量有什么区别

用 var 声明的变量的作用域是它当前的执行上下文,它可以是嵌套的函数,也可以是声明在任何函数外的变量。let 和 const 是块级作用域,意味着它们只能在最近的一组花括号(function、if-else 代码块或 for 循环中)中访问。

var 声明的全局变量和函数都会成为 window 对象的属性和方法。使用 let 和 const 的顶级声明不会定义在全局上下文中,但在作用域链解析上效果是一样的。

function foo() {

// 所有变量在函数中都可访问

var bar = ‘bar’;

let baz = ‘baz’;

const qux = ‘qux’;

console.log(bar); // bar

console.log(baz); // baz

console.log(qux); // qux

}

console.log(bar); // ReferenceError: bar is not defined

console.log(baz); // ReferenceError: baz is not defined

console.log(qux); // ReferenceError: qux is not defined

if (true) {

var bar = ‘bar’;

let baz = ‘baz’;

const qux = ‘qux’;

}

// 用 var 声明的变量在函数作用域上都可访问

console.log(bar); // bar

// let 和 const 定义的变量在它们被定义的语句块之外不可访问

console.log(baz); // ReferenceError: baz is not defined

console.log(qux); // ReferenceError: qux is not defined

var会使变量提升,这意味着变量可以在声明之前使用。let和const不会使变量提升,提前使用会报错。

console.log(foo); // undefined

var foo = ‘foo’;

console.log(baz); // ReferenceError: can’t access lexical declaration ‘baz’ before initialization

let baz = ‘baz’;

console.lo

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值