函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象; 不可以当作构造函数,也就是说不能使用new关键在,否者会抛出一个错误; 不可以使用arguments对象,该对象在函数体内不存在...数据类信、运算、对象、Function、继承、闭包、作用域、原型链、事件、RegExp、JSON、Ajax、DOM、BOM、内存泄露、跨域、异步装载、模板引擎、前端MVC、路由、模块化、Canvas、ECMAScript...26、eval是做什么的? eval可以把字符串解析成JS代码并运行; 避免使用eval,不安全,非常消耗性能; 把JSON字符串传换成JSON对象时可以使用eval。...不支持变量名提升; 使用let声明变量会形成块级作用域; 不允许重复声明,也就是在函数内部不允许重复声明参数。 37、如何通过JS判断一个数组?...let允许声明具有块级作用域的变量、语句或表达式,不支持变量名提升。 var用来声明全局变量,支持变量名提升。 const用来声明只读引用(即指针),当被改变时就会报错。
谈谈This对象的理解 this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。 但是有一个总原则,那就是this指的是调用函数的那个对象。...,如果没有就到这个对象的原型对象中去查找,还是没有的话,就到该作用域所在的作用域中找,直到到window所在的作用域,每个函数在声明的时候就默认有一个外部作用域的存在了,代码如下: var t=4;function...,先到自己的内部作用域中找,发现没有找到,然后到bb所在的最近的外部变量中找,也就是aa的内部作用域,还是没有找到,再到window的作用域中找,结果找到了 “use strict”;是什么意思 ?...闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环) 如何判断当前脚本运行在浏览器还是node环境中?...(2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数 (3) 用innerHTML代替DOM操作,减少DOM操作次数
例如: 不使用 或 等格式标记。 类或 ID 中不引用颜色或位置。 26. cookie在浏览器和服务器间来回传递。...理解跨域的概念:协议、域名、端口都相同才同域,否则都是跨域 出于安全考虑,服务器不允许ajax跨域获取数据,但是可以跨域获取文件内容,所以基于这一点,可以动态创建script标签,使用标签的src属性访问...答案:在js中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行...理解变量和函数的访问范围和生命周期,全局作用域与局部作用域的区别,JavaScript中没有块作用域,函数的嵌套形成不同层次的作用域,嵌套的层次形成链式形式,通过作用域链查找属性的规则需要深入理解。...简单的理解是函数的嵌套形成闭包,闭包包括函数本身已经它的外部作用域 使用闭包可以形成独立的空间,延长变量的生命周期,报存中间状态值 29、javascript 代码中的"use strict";是什么意思
JS的执行流就是通过这个执行栈进行控制的。7. 什么是作用域和作用域链?作用域可以理解为一个独立的地盘,可以理解为标识符所能生效的范围。作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。...ES6中有全局作用域、函数作用域和块级作用域三层概念。 当一个变量在当前块级作用域中未被定义时,会向父级作用域(创建该函数的那个父级作用域)寻找。...(1)函数的执行上下文只在函数被调用时生成,而其作用域在创建时已经生成; (2)函数的作用域会包含若干个执行上下文(有可能是零个,当函数未被调用时)。 9. this指向的各种情况都有什么?...如何理解同步和异步? 同步:按照代码书写顺序一一执行处理指令的一种模式,上一段代码执行完才能执行下一段代码。 异步:可以理解为一种并行处理的方式,不必等待一个程序执行完,可以执行其它的任务。...JS之所以需要异步的原因在于JS是单线程运行的。常用的异步场景有:定时器、ajax请求、事件绑定。15. JS是如何实现异步的?JS引擎是单线程的,但又能实现异步的原因在于事件循环和任务队列体系。
JS的执行流就是通过这个执行栈进行控制的。参考 前端进阶面试题详细解答7. 什么是作用域和作用域链?作用域可以理解为一个独立的地盘,可以理解为标识符所能生效的范围。...当一个变量在当前块级作用域中未被定义时,会向父级作用域(创建该函数的那个父级作用域)寻找。如果父级仍未找到,就会再一层一层向上寻找,直到找到全局作用域为止。这种一层一层的关系,就是作用域链 。...作用域和执行上下文的区别是什么?(1)函数的执行上下文只在函数被调用时生成,而其作用域在创建时已经生成; (2)函数的作用域会包含若干个执行上下文(有可能是零个,当函数未被调用时)。...如何理解同步和异步? 同步:按照代码书写顺序一一执行处理指令的一种模式,上一段代码执行完才能执行下一段代码。 异步:可以理解为一种并行处理的方式,不必等待一个程序执行完,可以执行其它的任务。...JS之所以需要异步的原因在于JS是单线程运行的。常用的异步场景有:定时器、ajax请求、事件绑定。15. JS是如何实现异步的?JS引擎是单线程的,但又能实现异步的原因在于事件循环和任务队列体系。
4) 发送http请求 xhr.send(data); 5) 获取异步调用返回的数据 注意: 1) 页面初次加载时,尽量在web服务器一次性输出所有相关的数据,只在页面加载完成之后,用户进行操作时采用ajax...可以参考我的另一篇文章JavaScript实现类与继承的方法(全面整理) 9 Javascript作用链域 作用域链的原理和原型链很类似,如果这个变量在自己的作用域中没有,那么它会寻找父级的,直到最顶层...注意:JS没有块级作用域,若要形成块级作用域,可通过(function(){})();立即执行的形式实现。...作用: 1) 消除js不合理,不严谨地方,减少怪异行为 2) 消除代码运行的不安全之处, 3) 提高编译器的效率,增加运行速度 4) 为未来的js新版本做铺垫。...因为cookie有域的限制,因此不能跨域提交请求,故使用非主要域名的时候,请求头中就不会带有cookie数据,这样可以降低请求头的大小,降低请求时间,从而达到降低整体请求延时的目的。
①它的功能是把对应的字符串解析成JS代码并运行; ②应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。...你在项目中如何使用Ajax?手写一个简单的Ajax操作。...因为它涉及浏览器兼容、跨域等问题,在项目中一般会使用一些基础类库辅助实现,如jQuery等。 一个简单的Ajax操作如下。 5、谈谈你对JSON的理解。...这些特性使JSON成为理想的数据交换语言。 所以它往往在AJAX中替代XML,交换数据。 6、你的项目中有使用到跨域吗?你在项目中是如何处理JS跨域问题的? ①有。...②get:专门用于发送get请求的便捷方法。 ③post:专门用于发送post请求的便捷方法。 ④ajaxSetup:设置调用ajax方法时的默认值。
4) 发送http请求 xhr.send(data); 5) 获取异步调用返回的数据 注意: 1) 页面初次加载时,尽量在web服务器一次性输出所有相关的数据,只在页面加载完成之后,用户进行操作时采用ajax...2) 同步ajax在IE上会产生页面假死的问题。所以建议采用异步ajax。 3) 尽量减少ajax请求次数 4) ajax安全问题,对于敏感数据在服务器端处理,避免在客户端处理过滤。...9、Javascript作用链域 作用域链的原理和原型链很类似,如果这个变量在自己的作用域中没有,那么它会寻找父级的,直到最顶层。...注意:JS没有块级作用域,若要形成块级作用域,可通过(function(){})();立即执行的形式实现。...作用: 1) 消除js不合理,不严谨地方,减少怪异行为 2) 消除代码运行的不安全之处, 3) 提高编译器的效率,增加运行速度 4) 为未来的js新版本做铺垫。
最近在项目开发的过程中遇到一些Javascript 跨域请求的问题,今天抽空对其进行总结一下,以备后用,也希望同学们在遇到类似问题的时候可以有所帮助。...所谓Javascript跨域问题,是指在一个域下的页面中通过js访问另一个不同域下的数据对象,出于安全性考虑,几乎所有浏览器都不允许这种跨域访问,这就导致在一些ajax和iframe应用中,使用跨域的web...下面来看看我们都是如何处理跨域请求的: 动态创建script 虽然浏览器默认禁止了跨域访问,但并不禁止在页面中引用其他域的JS文件,script标签的src属性引用指向接收方的一个处理地址(后台),该地址返回的...因为ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,是不允许js代码进行跨域操作,进而会发警告,所以jquery ajax post 是行不通的,可能这时有人会说...服务端代理 从上面的说明可以看到,客户端的解决方案局存在一定的局限性,而且对于ajax跨域请求,无论两个域是否属于同个基础域,都无法在客户端加以解决,也就是说如果我们要想在ajax请求中访问其他域下的数据
因此我们经常会利用函数的原型机制来实现JS继承。关于函数原型链可参考博客:JS原型对象和原型链 2、函数作用域 函数作用域就是变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。...在JS中没有会块级作用域,只有函数作用域,因此JS中还存在着另外一种怪异现象,那就是变量提升。...为了防止XSS攻击,浏览器对Ajax做了限制,不允许Ajax跨域请求服务器,就是只能访问当前域名下的url。 当然,如果确信你的站点不存在跨域的风险,可以在服务端主动开启跨域请求。...10、全局对象 window 在JS中,当一段JS代码在浏览器中被加载执行,JS引擎会在内存中构建一个全局执行环境,执行环境的作用是保证所有的函数能按照正确的顺序被执行,而window对象则是这个执行环境中的一个全局对象...文件,则发出css文件请求,服务器返回该文件; 如果中引用了外部js文件,则发出js文件请求,服务器返回该文件后开始运行; 渲染引擎继续载入html中的部分的代码,并开始解析前面返回的
result[i] = value } } return result } 二、作用域和闭包 1.执行上下文和执行栈 执行上下文就是当前 JavaScript 代码被解析和执行时所在环境的抽象概念...2.作用域与作用域链 ES6 到来JavaScript 有全局作用域、函数作用域和块级作用域(ES6新增)。我们可以这样理解:作用域就是一个独立的地盘,让变量不会外泄、暴露出去。...在介绍作用域链之前,先要了解下自由变量,如下代码中,console.log(a)要得到a变量,但是在当前的作用域中没有定义a(可对比一下b)。当前作用域没有定义的变量,这成为 自由变量。...3.前端异步的场景 前端使用异步的场景 定时任务:setTimeout,setInterval 网络请求:ajax请求,动态加载 事件绑定 4.Event Loop 一个完整的 Event Loop 过程...(isChrome) 5.Ajax与跨域 Ajax 是一种异步请求数据的一种技术,对于改善用户的体验和程序的性能很有帮助。
执行上下文和执行栈 执行上下文就是当前 JavaScript 代码被解析和执行时所在环境的抽象概念, JavaScript 中运行任何的代码都是在执行上下文中运行。...作用域与作用域链 ES6 到来JavaScript 有全局作用域、函数作用域和块级作用域(ES6新增)。我们可以这样理解:作用域就是一个独立的地盘,让变量不会外泄、暴露出去。...在介绍作用域链之前,先要了解下自由变量,如下代码中,console.log(a)要得到a变量,但是在当前的作用域中没有定义a(可对比一下b)。当前作用域没有定义的变量,这成为自由变量。...前端异步的场景 前端使用异步的场景: 定时任务:setTimeout,setInterval; 网络请求:ajax请求,动态加载; 事件绑定。 4....Ajax与跨域 Ajax 是一种异步请求数据的一种技术,对于改善用户的体验和程序的性能很有帮助。 简单地说,在不需要重新刷新页面的情况下,Ajax 通过异步请求加载后台数据,并在网页上呈现出来。
因此,我们可以通过原型链来实现JS继承。 2、函数作用域 函数作用域就是变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。...因此, JS中没有块级作用域,只有函数作用域 ,这种设计导致JS中出现了 变量提升 的问题。...简单来说就是,将变量声明提升到它所在作用域的最开始的部分,为了解决变量提升带来的副作用,ES6新增了 let 命令来声明变量,let 所声明的变量只在 let 命令所在的代码块内有效,所以不存在变量提升问题...为了防止XSS攻击,浏览器对Ajax请求做了限制,不允许Ajax 跨域请求服务器,只允许请求和当前地址同域的服务器资源。...,而是一个标准规范,当浏览器发现该请求需要跨域时,就会自动在头信息中添加一个 Origin 字段,用以说明本次请求来自哪个源。
Let、var和const的区别特性varletconst作用域函数作用域/全局作用域块级作用域块级作用域变量提升存在,可先使用后声明存在暂时性死区,不可先使用同 let重复声明允许不允许不允许赋值可多次赋值可多次赋值声明时必须赋值...封装:将数据和操作数据的方法封装在对象中,隐藏内部细节,暴露公共接口。继承:子类继承父类的属性和方法,实现代码复用。多态:同一方法在不同对象上有不同的表现形式(JS 中通过重写方法实现)。...简述下对Promise的理解以及你在什么情况下使用过Promise 理解:Promise 是解决 JS 异步回调地狱的方案,代表一个异步操作的最终完成(或失败)及其结果值。...箭头函数:没有自己的 this,this 指向箭头函数定义时所在作用域的 this。事件处理函数:this 指向触发事件的 DOM 元素。23....箭头函数与普通函数的区别this 指向:箭头函数无自己的 this,指向定义时所在作用域的 this;普通函数 this 指向调用者。
初识ES6 ES6:最新版的JS,ECMAScript标准 JavaScript语言(实现),它还有多种称呼: ECMAScript6.0 ECMA6 ES6 变量 var——重复定义不报错;没有块级作用域...;不能限制修改 let——变量,不能重复定义,有块级作用域 const——常量,不能重复定义,有块级作用域 函数+参数 箭头函数的简写方式: 只有一个参数,()可以省 只有一个语句,还是return...如果引用模块,有以下两种情况: html->js, 使用use js->js,使用require node的模块化: 没有define exports、require、module 引用自定义模块,模块基本放到...ajax——官方、不能跨域;单向传输 jsonp——民间、跨域;不推荐 websocket——双向传输 http协议——协议 无状态 请求过程:发送连接请求、响应接受、发送请求 消息分两块:头、身子(...jsonp——不要用 WebSocket——双向、跨域 什么是ajax2.0——ajax2.0的理解与应用实例 三种ajax上传文件方法 json标准格式 key必须用引号包起来 双引号 {"a":
函数作用域 变量在声明它们的函数体以及这个函数体嵌套的任意函数体 JS中没有块级作用域,只有函数作用域 导致JS中出现了变量提升的问题 —— 将变量声明提升到它所在作用域的最开始的部分 为了解决变量提升带来的副作用...,ES6新增了let 命令来声明变量,let 所声明的变量只在 let 命令所在的代码块内有效,所以不存在变量提升问题 1.4. this 指针 this 指针存在于函数中,用以标识函数运行时所处的上下文...闭包 具有独立作用域的静态执行环境 和函数作用域不同的是: 闭包的作用域 静态的,可以永久保存局部资源 函数作用域 只存在于运行时,函数执行结束后立即销毁 因此,闭包可以形成一个独立的执行过程...单线程和异步 JavaScript 单线程语言,在浏览器中,当JS代码被加载时,浏览器会为其分配一个主线程来执行任务(函数) 主线程会形成一个全局执行环境,执行环境在栈中采用后进先出(LIFO)的顺序来执行代码块...,而是一个标准规范,当浏览器发现该请求需要跨域时,就会自动在头信息中添加一个 Origin字段,用以说明本次请求来自哪个源。
初级JS面试题 JS Web API,开发环境,运行环境 原型,作用域,异步,Ajax,事件,webpack等 观察所有面试题的考点 学习梳理知识体系图 找准知识体系,刻意掌握 善于总结观点,原理 typeof...作用域分: 全局作用域 函数作用域 块级作用域(es6新增) 代码: let a = 0 function fn1() { let a1 = 100 function fn2() {...if(true) { let x=100 } console.log(x) // 会报错 自由变量 如果一个变量在当前作用域没有定义,但被使用了,向上级作用域去找,一层一层一次寻找,直到找到为止...this 作为普通函数被调用 使用call,apply,bind被调用 作为对象方法被调用 在class方法中被调用 箭头函数 this取什么值,是在函数执行的时候确定的,不是函数定义的时候确定的。...,浏览器直接跳转 4xx表示客户端请求错误 5xx表示服务器端错误 ajax 跨域 什么是跨域,同源策略 JSONP CORS,服务器端支持 同源策略-跨域 ajax请求时,浏览器要求当前网页和server
开发出来的方法就是通过使用选择器—基于元素的属性或元素在HTML文档中的位置,简明地表现元素。 例如,选择器:p a 引用所有嵌套于元素之内的超链接(元素)组。...> $("#myDiv").css("border","3px solid red"); 3.2.2、通过类名获取元素 在网页当中,使用class属性引用样式表中的类样式,...因为类样式的可重用,所以多个元素可以引用同一个样式。...每个转换器的值是一个函数,返回响应的转化值 crossDomain map 默认: 同域请求为false 跨域请求为true如果你想强制跨域请求(如JSONP形式)同一域,设置crossDomain为...注意:'''在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载) "json": 返回 JSON 数据 。