1.$scope.apply()
答案:判断$scope.$root.$phase! =’$apply’&&$scope.$root.$phase!
=”$digest”去刷新$scope.$apply()
2.Ajax解决浏览器缓存问题
答案:a.请求后加时间戳(“nowtime=” +new Date().getTime())
b.anyAjaxObj.setRequestHeader(“Cache-Control”,”no-cache”)
3.angular promise用法
答案:把异步对象ajaxobj=camel.get({})push.$scope.promise内$q.all($scope.promise).then(function(){})
4.angular 监听路由切换
答案:$rootScope.$on(“$stateChangeStart”,function(e,toState,toParams,fromState,fromParams){...})
5.angular 输出Html
答案:app.filter(‘trustHtml’,function($ssce){return function(input){return $sce.trustAsHtml(input)}})
6.attr和prop的区别
答案:attr是获取和修改dom属性,一般用来操作自定义属性;prop是获取和修改dom对象属性,一般用来操作自带的属性
7.call和apply的详解(fn,call call谁fn中的this指向的谁,区别传参,多个和数组)
答案:fn.call(obj,100,10)fn中的this就指向obj call和apply的差别就是传参的不同:一个是单个传一个是数组形式传
用处:a.修改this指向 b.继承父类
8.config能注入什么不能注入什么(什么样的东西能够注入到config里面呢)
答案:提供者:$stateProvider,$urlRouterProvider,$controllerProvider,$provide.$httpProvider constant(常量)
9.CSS3新增属性,平移怎样实现
答案:border-radius box-shadow border-image background-size background-origin text-shadow word-wrap transform等。平移:transform:translate(50px,40px)
10.Css选取ul的前三个li,
答案:1.选取前三个 ul li(-n+3){} 2.选取第六个开始 ul li (n+6){} 3.选取3-6个 ul li(-n+3):li(n+6){}
11.directive没有scope的参数
答案:没有scope he 指令和当前模块共用一个scope
12.every()和some()
答案:every()是对数组中每一项运行给定函数,如果该函数对每一项返回true,则返回true, some()是对数组中每一项运行给定函数,如果该函数对任何一项返回true,则返回true。
12.filder根据数组对象id过滤
答案:var arrObj=[{id:1,label:’qqq’},{id:2,label:’www’},{id:3,label:’eee’}]
arrObj=arrObj.filter(
function(item){
return item.id!==3
})
13.instanceof和typeof
答案:1.instanceof用于判断一个引用类型是否属于某构造函数,也可以判断实例是否属于父类
2.typeof判断number string boolean null undefined function基础类型
14.jq方法拓展
1.对jq选中元素的方法的扩展:$fn.alertWhileClick=function(){}
使用$('#dome1 input').alertWhileClick()
2.对jq的自身的扩展:$extend({myMethod:function(param1,param2...){}})
使用:$.myMethod(10,20)
15.jq选择非空元素,(比如有10个div选择里面没有内容的)
答案:("div:empty").siblings().css({'width':'100px','height':'100px','background':'red'})
16.js单线程执行机制(setInterval setTimeout promise 执行顺序)
答案:预编译
var bar;
function aaa(){}先执行从上到下 new Promises(function(){...})console.log(bar)等
,再执行.then(function(){...})再执行setTimeout(function(){...},0)
17.js执行顺序
答案:对 var bar;变量和function aaa(){}定义的函数进行“预编译处理”;从上到下处理代码(以花括号{}为边界处理代码块)
18.map
答案:var data=[1,2,3,4];
var arrayOfSquares=data.map(function(item){return item*item;});
alert(arrayOfSquares)
19.new 操作符调用构造函数,会经历的阶段
答案:1.创建一个新对象
2.将构造函数this指向这个新对象
3.为这个对象添加属性和方法
4.返回新对象
20.pc端兼容性
答案: 1.字体的兼容
2.浏览器差异
3.DOM事件兼容
21.ready()和onload()
答案:1.$(document).ready()/$(function(){})是dom树结构加载完进行加载,可以存在多个
2.window.onload是所有的资源加载完成进行加载,只能存在一个
22.reduce
答案:[1,2,3,4].reduce(function(previous,current,index,array){console.log(previous,current,index,array);return previous + currtent;})
23.service传参
答案:1.$scope.$watch('a',function(n){myService.change(true)})
2.app.service('myService',function($rootScope){return{change:function(n){$rootScope.$broadcast('a',n)}}})
3.$scope.$on('a',function(e,n){doSome()})
24.setTimeout和循环混用详情
答案:for(var i=0;i<=5;i++){
setTimeout(function(i){
return function(){
console.log(i)
}
}(i),1000*i)
}
25.从输入URL到显示网页发生了什么
答案: 1.DNS(域名和IP地址相互映射的一个分布式数据库)域名解析DNS缓存DNS负载均衡
2.建立TCP链接(3次握手:为了防止已经失效的连接请求报文段突然又传送到服务端,因而产生错误)
3.向服务器发送请求
4.服务器响应
5.页面渲染
26.冒泡和捕获
答案: 1.事件触发顺序自外向内,事件捕获
2.事件触发自内向外,事件冒泡
$('ul').on('click',function(e){
$(e.target).css('color','red').siblings().css('color','green')
})
27.判断js中的数据类型的集中几种方法
答案: 1.typeof() string number boolean undefined null基本 +引用function object Array
2.instanceof判断引用 instanceof Array -> true
3.constructor c.constructor===Array -> true
4.prototype
28.动画
@keyframes move_top{from {opacity:0;}to {opcity:1}}
或者0%{top:0;left:0px;}30%{top:300px;left:0px}.move_top{animation:mymove 5s infinite}
29.原生js promise用法
答案:1. .then方法:promiseFun(2).then(function(resp){return anotherFun(resp)})
2..all方法:function renderAll(){
promiseList.push(promiseFun(1));
promiseList.push(anotherFun(2));
promise.all(promiseList).then(
function(value){...}
)}
29.双向数据绑定
答案:1.ng-click更改了此数据angularjs自动调用$digest()触发$digest循环开始触发每个watcher,watcher检查scope中的当前model和上次的model的不同。不同则被刷新
2.指定事件触发,进入循环检查a.dom事件(ng-click)b.$http c.$timeout/inter d.$apply/$digest e.$location
30.对象合并
答案:c=Object.assign(c,a,b)
31.对象的深拷贝
答案:function objDeepCopy(source){
var sourceCopy={};
for (var item in source)sourceCopy[item]=typeof source[item]==='object'?objDeepCopy(source[item]):source[item];return sourceCopy}
32.封装一个get请求
答案:1.var XHR=new XMLHttpRequest()
2.XHR.open('GET',url,true)
3.XHR.send()
4.XHR.onreadystatechchange=function(){if(XHR.readyState==4&&XHR.status==200{resolve(res)})}将1234步放在function getJSON(url){new Promise(function(resolve,reject){1,2,3,4})}getJSON(url).then(res=>console.log(res))
33.攻击
答案:1.XSS跨站脚本攻击 恶意攻击者往Web页面里插入恶意的Script代码,当用户浏览该网页时,嵌入其中的web里面的script代码会被执行,从而达到恶意攻击用的目的
2.CSRF跨站请求伪造 正常访问a页面访问了恶意网站b页面,b返回恶意请求代码,使浏览器带着a的cookie去访问a,b的恶意代码被执行。 防护措施:验证码 token验证
34.数组_数组对象_最大值最小值
答案:数组(最大值)Math.max.apply(null,['1','2','3.1','3.2'])
2.数组对象(最大id)Math.max.apply(Math,arrObj.map(function(0){return o.id}))
35.数组去重
function delArrObj(arr,name){
var hash={};
var arrNew=arr.reduce(
function(item,next){
hash[next[name]]?'':hash[next[name]]=true&&item.push(next);
return item
},[]);
return arrNew
}
36.数组深拷贝
答案: 1.arrCopy=arr.slice(0)
2.arrCopy=arr.concat()
3.var arr=['a','b'],
arrCopy=[];
for(var item in arr){
arrCopy[item]=arr[item]
}
37.竖直、水平居中
答案:1.子元素 position: absolute;top:50%; left:50%; transform:translate(-50%.,-50%) 父元素 position: relative;
2.父元素 position:relative 子元素position: absolute; top:0;left:0;bottom:0;right:0;margin:auto
3.父元素 display:flex; justify-content:center;align-items:center
38.给定时器传参的两种方法
答案:
1.自执行函数
(function(item){
mytimer=setTimeout(function(){
console.log(item)
},1000)}
)(item)
2.闭包
yourtimer=setTimeout(fn,1000)
var fn=aaa(666)
function aaa(params){
return function(){
console.log(params)
}
}
39.要配置一个路由,需要注入哪些依赖
答案:$stateProvider $urlRouterProvider
40.闭包
答案:能够读取其他函数内部的变量的函数
41.闭包for循环延时器混合使用
答案:for循环闭包传参i
1.for使用let(延时器毫秒数*i,隔1s执行一次)
2.for循环里面setTimeout(function(i){
return function(){
console.log(i)
}
}(i),1000*i)
42.闭包应用场景之setTimeout
答案: var f=func(1)
setTimeout(f,1000)
function func(param){
return function(){
console.log(param)
}
}
43.闭包应用场景之封装变量
答案:一个函数里面有obj存有name age method等return一个带参函数(闭包)这个函数能够读取外部函数的name age var f=func() f('name')//John; f()//17
44.闭包的缺点
答案:滥用闭包会导致网页性能差,甚至内存泄漏,因为垃圾收集策略是标点清除,变量被引用是不能清除的,所以闭包使用完或者不需要变量是赋值为null