js笔记整理

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)obj2obj1.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,这段代码会编译成
``

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值