1.75道css面试题,附必过答案javascript
详情参考连接(比较详细):www.bslxx.com/a/mianshiti…php
1.react中经过proxy解决跨域问题css
在webpack里面写上相似于:html
"proxy": {java
"/api": {
"target": "http://localhost:8080",
"pathRewrite": {
"^/api" : ""
},
"changeOrigin": true
}
复制代码
}react
2.react常见面试题目网址:blog.csdn.net/qq_25073545…webpack
3.服务端渲染好处es6
SEO,让搜索引擎更容易读取页面内容web
首屏渲染速度更快(重点),无需等待js文件下载执行的过程面试
更易于维护,服务端和客户端能够共享某些代码
1.js中几种实用的跨域方法原理详解
这里说的js跨域是指经过js在不一样的域之间进行数据传输或通讯,好比用ajax向一个不一样的域请求数据,或者经过js获取页面中不一样域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不一样,都被看成是不一样的域。
详细看法请见网址:www.cnblogs.com/2050/p/3191…
2.经典的20道AJAX面试题
AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种建立交互式网页应用的网页开发技术。
详细信息请见网址:blog.csdn.net/chow__zh/ar…
3.AJAX常见面试问题你会多少?ajax的12个常见面试题及其答案
本篇文章主要的讲述了关于ajax的面试题问题和答案,你们能够多看看,看看那些面试的那些人是如何出题的,还有看看正确答案究竟是什么。如今就让咱们来看这篇文章吧
详细信息请见网址:www.php.cn/js-tutorial…
4.js闭包 、 做用域 、 原型链等面试题目
**1)完全搞懂JS闭包各类坑**
闭包指的是:可以访问另外一个函数做用域的变量的函数。清晰的讲:闭包就是一个函数,这个函数可以访问其余函数的做用域中的变量
复制代码
一:闭包的缺点:
1) 引用的变量可能发生变化
function outer() {
var result = [];
for (var i = 0; i<10; i++){
result.[i] = function () {
console.info(i)
}
}
return result
复制代码
}
打印10个10
解决方法:
function outer() { var result = []; for (var i = 0; i<10; i++){ result.[i] = function (num) { return function() { console.info(num); // 此时访问的num,是上层函数执行环境的num,数组有10个函数对象,每一个对象的执行环境下的number都不同 } }(i) } return result } 打印1,2,3,4,5,6,7,8,9,10
2) this指向问题
var object = { name: ''object", getName: function() { return function() { console.info(this.name) } } } object.getName()() // underfined // 由于里面的闭包函数是在window做用域下执行的,也就是说,this指向windows
3)内存泄露问题
function showId() {
var el = document.getElementById("app")
el.onclick = function(){
aler(el.id) // 这样会致使闭包引用外层的el,当执行完showId后,el没法释放
}
}
复制代码
// 改为下面
function showId() {
var el = document.getElementById("app")
var id = el.id
el.onclick = function(){
aler(id) // 这样会致使闭包引用外层的el,当执行完showId后,el没法释放
}
el = null // 主动释放el
}
复制代码
二:闭包的优势
为何闭包有那么多缺点,那么多很差的地方,为啥还要用闭包呢?具体缘由参考下面:
技巧1: 用闭包解决递归调用问题
function factorial(num) {
if(num<= 1) {
return 1;
} else {
return num * factorial(num-1)
}
}
var anotherFactorial = factorial
factorial = null
anotherFactorial(4) // 报错 ,由于最好是return num* arguments.callee(num-1),arguments.callee指向当前执行函数,可是在严格模式下不能使用该属性也会报错,因此借助闭包来实现
复制代码
使用闭包实现递归
function newFactorial = (function f(num){
if(num<1) {return 1}
else {
return num* f(num-1)
}
}) //这样就没有问题了,实际上起做用的是闭包函数f,而不是外面的函数newFactorial
复制代码
技巧2:用闭包模仿块级做用域**
es6没出来以前,用var定义变量存在变量提高问题,eg:
for(var i=0; i<10; i++){
console.info(i)
}
alert(i) // 变量提高,弹出10
//为了不i的提高能够这样作
(function () {
for(var i=0; i<10; i++){
console.info(i)
}
})()
alert(i) // underfined 由于i随着闭包函数的退出,执行环境销毁,变量回收
复制代码
做用域
一:js做用域(全局变量,局部变量)内部能够访问外部,但外部的不能访问内部的
var a=10;
function aaa(){
alert(a);
};
aaa(); //a 为外部变量即全局变量,因此能够直接访问到 结果为10
复制代码
function aaa(){
var a=10;
};
aaa();
alert(a); //a 为函数aaa()内部变量量即局部变量,因此没法访问到
复制代码
var a=10;
function aaa(){
alert(a);
};
function bbb(){
var a=20;
aaa();
}
bbb(); //结果为10,由于aaa()函数不能访问到bbb()里面的局部变量,因此访问到的是a=10,这个全局变量。
复制代码
二.不用var 定义变量时,会默认为是全局变量(不规范,不推荐)
function aaa(){
a=10;
}
aaa();
alert(a); //结果为10;
//等价于:
var a;
function aaa(){
a=10;
};
aaa();
alert(a);
复制代码
JS中的块级做用域,var、let、const三者的区别
首先,ECMAScript和JavaScript关系:
ECMAScript是一个国际经过的标准化脚本语言。JavaScript由ECMAScript和DOM、BOM三者组成。能够简单理解为:ECMAScript是JavaScript的语言规范,JavaScript是ECMAScript的实现和扩展。
JS中做用域有:全局做用域、函数做用域。没有块做用域的概念。ECMAScript 6(简称ES6)中新增了块级做用域。 块做用域由 { } 包括,if语句和for语句里面的{ }也属于块做用域。
<script type="text/javascript">
{
var a = 1;
console.log(a); // 1
}
console.log(a); // 1
// 可见,经过var定义的变量能够跨块做用域访问到。
(function A() {
var b = 2;
console.log(b); // 2
})();
// console.log(b); // 报错,
// 可见,经过var定义的变量不能跨函数做用域访问到
if(true) {
var c = 3;
}
console.log(c); // 3
for(var i = 0; i < 4; i++) {
var d = 5;
};
console.log(i); // 4 (循环结束i已是4,因此此处i为4)
console.log(d); // 5
// if语句和for语句中用var定义的变量能够在外面访问到,
// 可见,if语句和for语句属于块做用域,不属于函数做用域。
</script>
复制代码
var定义的变量,没有块的概念,能够跨块访问, 不能跨函数访问。
let定义的变量,只能在块做用域里访问,不能跨块访问,也不能跨函数访问。
const用来定义常量,使用时必须初始化(即必须赋值),只能在块做用域里访问,并且不能修改。