面试总结之Javascript篇(一)

          最近在找实习,自己面试了几家公司,也从小伙伴那里讨了经验。下面总结一些Javascript相关的面试题,面试gogogo!


      1. Javascript的同源策略

  同源策略简单的说就是一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合。

举例如下:

来自 http://www.example.cn/a/b.html 的js脚本访问以下URL的结果及原因:

序号

URL

结果

原因

1

http://www.example.cn/c/d.html

成功

 

2

http://www.example.cn/d/e/f.html

成功

 

3

https://www.example.cn/a/b/html

失败

协议不同

4

http://www.example.cn:81/a/c.html

失败

端口不同

5

http://www.another.com.cn/a/b.html

失败

主机名不同

注:示例4中,http://www.example.cn/a/b.html 在不显式说明端口号时默认为80端口。

 

2. 如何跨域访问?(来自小伙伴)

          跨域受限:

                       

          三种解决方法如下:

          a. 利用documentdomain属性

               在javascript 1.1版本以后,document对象引进了一个domain属性。例如对于http://www.example.com/a.html 和http://bbs.example.com/b.html 这两个页面,可以看到他们的主域名都是example.com,    这时可以通过将domain属性设置成指向同一个域名可以实现跨域访问。

               即在前者中设置

                

      <javascript>
           document.domain=’example.com’;
      </javascript>

              在后者的脚本中设置

       <javascript>
          document.domain=’example.com’;
       </javascript>

这样两者就都可以通过获得另外一方的document对象来访问对方内容了。

b. 利用JSONPJSON with padding

     对于完全不同的两个域的访问,浏览器的scriptimgiframe标签是不受同源策略限制的 ,所以通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的callback函数,并把我们需要的json数据作为参数传入。在服务器端,当req.params参数中带有callback属性时,则把数据作为callback的参数执行,并拼接成一个字符串后返回。网页端的代码如下:

      

      创建一个函数tryJSONPadding,并在script标签的源地址中加入这个函数名,服务器端的处理如下(Node.js):

  

c. CORS(跨域资源共享)
  在服务器端通过检查请求头部的origin,从而决定请求应该成功还是失败。具体的方法是在服务端设置Response Header响应头中的Access-Control-Allow-Origin为对应的域名,实现了CORS(跨域资源共享),这里出于在安全性方面的考虑就是尽量不要用“*”,但对于一些不重要的数据则随意。

 

3. JS闭包的概念

  Javascript函数作用域限制了我们直接访问函数内部属性。函数作用域允许子函数一级一级地向上寻找所有父函数的属性,所以父函数的所有属性,对子函数都是可见的,反之则不成立。但是有时我们确实需要得到函数内部属性值,这时便可以根据函数闭包来解决这个问题。

  可以这么来理解函数闭包,函数内部(父函数)定义了一个匿名函数(子函数),匿名函数返回一个值,这样可以调用该函数,从而得到匿名函数的返回值,匿名函数返回值是上层函数的内部属性,这样我们就通过在函数中定义了一个匿名函数来获得该函数作用域的属性值。同样地,把函数当作对象的语言都存在闭包。如python等。

  闭包可以用在许多地方,它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。闭包的优点有:灵活和方便,封装,缺点有:空间浪费,内存泄漏以及性能消耗。

   

   第一篇总结到此结束~

            

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值