优秀程序员web前端教程分享JavaScript面试题 1、JavaScriptthis指针、闭包、作用域 this:指向调用上下文 closure:内层作用域可以访问外层作用域的变量 scope:定义一个函数开辟一个局部作用域,整个js执行环境都是全局作用域 2.JavaScript的同源策略 一个脚本只能读取同一来源的窗口和文件的属性,这里的同一来源是指主机名、协议和端口号的组合 http,ftp:protocol hostname;localhost 端口名:80:http协议的默认端口 https:默认端口为8083 同源策略问题:无法实现不同域名下的ajax请求, 如果你想从其他请求js文件sources,或者json数据,那么就可以使用jsonp来解决 3.看下面的代码,输出结果是什么?解释原因 varundefined;//此时变量undefined的值为undefined//false 0==false;//true 0=='';//true NaN==NaN;//false []==false;//真 []==![];//true undefined等于null,但不等于(===) 一个是数字,另一个是字符串,它会尝试将字符串转换为数字 尝试转换booleantonumber,0or1 尝试将Object转换为number或string,取决于另一个比较值的类型 所以,对于0和空字符串的判断,推荐使用"===”。“===”会先判断两边的值类型,不匹配则为false。 4。请说说饼干的坏处 1。Cookie的数量和长度限制。每个域最多只能有20个cookie,每个cookie的长度不能超过4KB,否则会被截断。 2.安全问题。如果cookie被某人拦截,则该人可以获得所有会话信息。即使加密也无济于事,因为拦截器不需要知道cookie的含义,他只要按原样转发cookie就可以达到目的。 3。有些状态不能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保留一个计数器。如果我们在客户端保存这个计数器,它不会有任何效果。 5.哪些操作会导致内存泄漏? 内存泄漏是指在您不再拥有或不需要它之后仍然存在的任何对象。 垃圾收集器周期性地扫描对象并计算引用每个对象的其他对象的数量。如果一个对象的引用次数为零(没有其他对象引用过该对象),或者对该对象的唯一引用是一个循环,那么该对象的内存就可以被回收。 1。如果setTimeout的第一个参数使用字符串而不是函数,会造成内存泄漏。 2。关闭 3。控制台日志 4。循环(当两个对象相互引用并相互保留时,就会产生循环) 6.产量是多少? vara=6; setTimeout(function(){ vara=666;//因为变量a是局部变量 alert(a);//输出666, },1000); a=66; 因为vara=666;定义局部变量a,赋值666。根据变量作用域链, 全局变量在作用域的末尾,局部变量优先访问变量,从而覆盖全局变量。 vara=6; setTimeout(function(){ //变量提前声明 alert(a);//输出undefined vara=666; },1000); a=66; 因为vara=666;定义了局部变量a,也覆盖了全局变量,但是在alert(a)之前; a没有赋值,所以输出是undefined。
