提升
JS代码运行的两个阶段:
预解析:把所有 变量声明 和 函数定义 提前,注意变量的赋值不会提前
执行: 从上到下执行
闭包
通俗的讲,函数去访问其他函数的局部变量
var aContaint = [];
for (var i= 0,l=10;i<l;i++) {
aContaint[i] = (function (key) {
return function (){
console.log(key);
}
})(i);
}
跨域
相关文档:http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html
由于JavaScript同源策略的限制,
出于安全方面的考虑,JavaScript不允许跨域通信
并且,
同一域名下的不同端口或者不同协议下也是不允许通信的,这种情况下,前台无法控制
在跨域问题上,域仅仅是通过“URL的首部”来识别,不会尝试解析域名
解决方案
方案1.动态创建script标签
原理:在页面中引用其他域的JS文件是允许的,并执行引入的JS文件中的function
定义好方法,让跨域的服务器文件返回该方法的调用;
function funCallback(array){
}
var url = "http://www.baidu.com/info.php?a=1&b=2&_jsonp=funCallback";
var oScript = document.createElement("script");
oScript.src = url;
document.body.appendChild(oScript);
但是,产生了一个问题,我们如何让服务器文件返回我们写的函数名
于是,jsonp应运而生,我们在请求参数中来规定服务器文件返回的函数名
jQuery下
$(function () {
$.ajax({
url: "http://localhost/20160904/07ems.php",
type: "GET",
dataType: "jsonp",
jsonp: "_jsonp",
success: function (json) {
console.log(json);
},error: function () {
console.log("失败");
}
});
});
<?php
/*GET请求不缓存响应*/
header("Cache-Control:no-cache");
/*返回的字符集规范*/
header("Content-Type:text/html;charset=utf-8");
function funGET($str){
return !empty($_GET[$str]) ? $_GET[$str] : null;
}
function funPOST($str){
return !empty($_POST[$str]) ? $_POST[$str] : null;
}
$callback = $_GET["_jsonp"];
$aData = array("正","大","综","艺");
echo $callback."(".json_encode($aData).")";
?>
解决方案2.iframe内嵌
解决方案3.服务器端解决
/*允许跨域访问*/
header("Access-Control-Allow-Origin:*");