文章目录
- js整理
- 1.$.fn.函数名
- 2.;(function($, window, document,undefined) {})(jQuery, window, document);
- 3. . e x t e n d ( o b j 1 , o b j 2 ) 方 法 ( 进 行 合 并 o b j 2 合 并 到 o b j 1 ) 和 .extend(obj1,obj2)方法(进行合并obj2合并到obj1)和 .extend(obj1,obj2)方法(进行合并obj2合并到obj1)和.isPlainObject()(是不是纯粹的对象)
- 4.Js中匿名函数和非匿名函数的区别
- 5.es5和es6js版本区别
js整理
1.$.fn.函数名
- 作用
. f n . a b c ( ) 之 后 , 是 给 j q u e r y 定 义 全 局 的 函 数 , 可 以 直 接 用 .fn.abc()之后,是给jquery定义全局的函数,可以直接用 .fn.abc()之后,是给jquery定义全局的函数,可以直接用("#xxx").abc();具体见下面的slideVerify
- 代码
//verify.js里定义的函数
$.fn.slideVerify = function(options, callbacks) {
var slide = new Slide(this, options);
if (slide.options.mode=="pop" && slide.options.beforeCheck()) {
slide.init();
}else if (slide.options.mode=="fixed") {
slide.init();
}
};
//zxym.htm页面
/*验证码*/
/*投票点击事件*/
$('#content').slideVerify({//点击验验证码:pointsVerify;拖动验证码:slideVerify
baseUrl: 'http://api2.cas.cn/api', //服务器请求地址, 默认地址为安吉服务器;
containerId: 'btn',//pop模式 必填 被点击之后出现行为验证码的元素id
mode: 'pop', //展示模式
imgSize: { //图片的大小对象,有默认值{ width: '310px',height: '155px'},可省略
width: '400px',
height: '200px',
},
barSize: { //下方滑块的大小对象,有默认值{ width: '310px',height: '50px'},可省略
width: '400px',
height: '40px',
},
beforeCheck: function () { //检验参数合法性的函数 mode ="pop"有效
let flag = true;
return true;
},
/*扩展插件校验功能:是否点击复选框*/
beforeClick: function () {
//点击验证码出现的按钮之前需要进行的验证条件,如果可以return true;不可以return false
},
ready: function () {
}, //加载完毕的回调
success: function (params) {
//拖动验证码验证成功后的操作
}
})
2.;(function($, window, document,undefined) {})(jQuery, window, document);
- 代码最前面的’;’
代码最前面的分号,可以防止多个文件压缩合并以为其他文件最后一行语句没加分号,而引起合并后语法错误。
- 匿名函数(function(){})();
执行匿名函数
- 实 参 : 实参: 实参:是jquery的简写,很多方法和类库也使用 , 这 里 ,这里 ,这里接受jQuery对象,也是为了避免$变量冲突,保证插件可以正常运行。
- window, document实参分别接受window, document对象,window, document对象都是全局环境下的,而在函数体内的window, document其实是局部变量,不是全局的 window, document对象。这样做有个好处就是可以提高性能,减少作用域链的查询时间,如果你在函数体内需要多次调用window 或 document对象,这样把window 或 document对象当作参数传进去,这样做是非常有必要的。当然如果你的插件用不到这两个对象,那么就不用传递这两个参数了。
- 最后剩下一个undefined形参了,那么这个形参是干什么用的呢,看起来是有点多余。undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此 增加一个形参undefined
3. . e x t e n d ( o b j 1 , o b j 2 ) 方 法 ( 进 行 合 并 o b j 2 合 并 到 o b j 1 ) 和 .extend(obj1,obj2)方法(进行合并obj2合并到obj1)和 .extend(obj1,obj2)方法(进行合并obj2合并到obj1)和.isPlainObject()(是不是纯粹的对象)
- 代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试$.extend()方法(是不是合并)和$.isPlainObject()(是不是纯粹的对象)</title>
</head>
<body>
<div id="log"></div>
<script type="text/javascript" src="//api.cas.cn/lib/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function () {
var object1 = {
apple: 0,
banana: {weight: 52, price: 100},
cherry: 97
};
var object2 = {
banana: {price: 200},
durian: 100
};
/* object2 合并到 object1 中 */
$.extend(object1, object2);
var printObj = typeof JSON != "undefined" ? JSON.stringify : function(obj) {
var arr = [];
$.each(obj, function(key, val) {//eg.key为apple,value为0
var next = key + ": ";
next += $.isPlainObject(val) ? printObj(val) : val;//递归调用printObj()
arr.push( next );
});
return "{ " + arr.join(", ") + " }";
};
$("#log").append( printObj(object1) );
})
</script>
</body>
</html>
- 效果
4.Js中匿名函数和非匿名函数的区别
-
什么是匿名函数和非匿名函数
非匿名函数:function foo()
匿名函数:var foo = function () {}
两者的区别
说明
js先编译后运行,js编译有个很重要的规则是变量提升原则(变量先编译,然后)
参考链接:
https://www.zhihu.com/question/19878052
https://blog.csdn.net/qq_31967569/article/details/82221401
5.es5和es6js版本区别
(1)怎样区分es5和es6
js分为两个版本,一个es5和es6,那怎样是es5,怎样是es6呢,只要js中有let定义变量,就是es6,严格按照es6标准来。
eg.没有先定义变量,然后输出,前端直接报错
(2)es5和es6中的js作用域
1.es5版本的js中是没有块级作用域的,只有全局作用域和函数作用域。但是es6是有的。
es5版本
for(var i =0;i<10;i++){
}
alert(i);
es6版本(通过是否定义let来判断es6和es5)**
for(let i =0;i<10;i++){
}
alert(i);
2.es5版本js用函数来形成块级作用域(这种写法叫做立即调用函数表达式(IIFE))
(function (){
for(var i =0;i<10;i++){
}
})();
alert(i);
(3)变量提升(ES5中的概念,ES6中新的用法不会出现变量提升)
变量提升其实就是将声明提到了最前面,所以输出的是undefined;
a=10;
(function(){
console.log(a)
var a=1;
})();//这里属于函数作用域,取不到a=10
这段代码会编译成
a=10;
(function(){
var a =undefined;
console.log(a);
a=1;
})();//这里属于函数作用域,取不到a=10
ion(){console.log(a)var a=1;})();//这里属于函数作用域,取不到a=10,这段代码会编译成
``