Interview 8
关于作用域和自由变量的场景题
判断字符串以字母开头,后面字母数字下划线,长度6-30
关于作用域和自由变量的场景题
this is a JS world
函数声明和函数表达式的区别
函数声明 function fn(){}
函数表达式 const fn = function(){}先定义一个变量再赋值为函数
函数声明会在代码执行前预加载,而函数表达式不会
代码演示
const res = sum(10,20)
console.log(res)
//函数声明,会在代码执行器预加载
function sum(x,y){
return x+y
}
//函数表达式不行
const sum=function sum(x,y)
{
return x+y
}
jsonp本质是ajax吗?
ajax是通过xml实现
jsonp是通过html实现
浏览器的同源策略(服务端没有同源策略)和跨域
哪些html标签能绕过跨域?img script
jsonp定义一个全局函数去访问一个js
document.load(网页全部加载完成才实现)和ready(dom渲染完成即可实现)的区别
== 和=== 区别
== 会尝试类型转换
=== 严格执行
如何阻止事件冒泡和默认行为?
event.stopPropagation()
event.preventDefault()
查找,添加,删除,移动DOM节点的方法
如何减少DOM操作
缓存DOM查询结果
多次DOM操作合并到一次插入
函数call和apply区别
事件代理(委托)是什么
闭包是什么,有什么特性,有什么区别
函数call和apply区别
fn.call(this,p1,p2,p3)// call的参数是一个个拆分传进去
fn.apply(this,arguments)// arguments是数组或者类数组传参
事件代理(委托)是什么
手写深度比较,模拟loadash is Equal
split()和join()的区别
数组的pop push unshift shift分别做什么
手写深度比较lodash.isEqual
实现如下效果
const obj1={a:10,b:{x:100,y:200}}
const obj2={a:10,b:{x:100,y:200}}
isEqual(obj1,obj2)===true
代码演示
Q:var 和 let const 区别
A:var是ES5语法,let const是ES6语法;var有变量提升
var 和let是变量,可修改,const是常量,不可修改
let const 有块级作用域,var没有
代码演示
var-let-const.js
//变量提升ES5
console.log(a)//undefined
var a =200
var a
console.log(a)//undefined
a = 200
//函数表达式 vs 函数声明
你正在购物,看中了某个商品,商品ID是100
付费接口是xxx.com/pay?id=100,但是没有任何验证
我是攻击者, 我看中了一个商品,id是200
我给你发一封电子邮件,邮件标题很吸引人
但是邮件正文隐藏着
你一查看邮件,就帮我购买了id是200的商品
使用post 接口
xss跨站请求攻击
XSRF跨站请求伪造
XSS攻击
一个博客网站,发表一篇blog,其中嵌入 <script>
脚本
脚本内容:获取cookie,发送到我的服务器(服务器允许跨域)
发布这篇blog,有人查看,我就轻松收割访问者的cookie