前端面试题目总结

一:css

1.75道css面试题,附必过答案javascript

详情参考连接(比较详细):www.bslxx.com/a/mianshiti…php

二:react

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文件下载执行的过程面试

更易于维护,服务端和客户端能够共享某些代码

三: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的实现和扩展。

  1. 块做用域{ }

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>
复制代码
  1. var、let、const的区别

var定义的变量,没有块的概念,能够跨块访问, 不能跨函数访问。

let定义的变量,只能在块做用域里访问,不能跨块访问,也不能跨函数访问。

const用来定义常量,使用时必须初始化(即必须赋值),只能在块做用域里访问,并且不能修改。

相关文章
相关标签/搜索