js封装 与 js高级用法 问题集合
1. 什么是自执行的匿名函数?
它是指形如这样的函数: (function {// code})();
2. 疑问 为什么(function {// code})();可以被执行, 而function {// code}();却会报错?
3. 分析
(1). 首先, 要清楚两者的区别: (function {// code})是表达式, function {// code}是函数声明.
(2). 其次, js"预编译"的特点: js在"预编译"阶段, 会解释函数声明, 但却会忽略表式.
(3). 当js执行到function() {//code}();时, 由于function() {//code}在"预编译"阶段已经被解释过, js会跳过function(){//code}, 试图去执行();, 故会报错;
当js执行到(function {// code})();时, 由于(function {// code})是表达式, js会去对它求解得到返回值, 由于返回值是一 个函数, 故而遇到();时, 便会被执行.
另外, 函数转换为表达式的方法并不一定要靠分组操作符(),我们还可以用void操作符,~操作符,!操作符……
例如:
bootstrap 框架中的插件写法:
!function($){
//do something;
}(jQuery);
和
(function($){
//do something;
})(jQuery); 是一回事。
匿名函数最大的用途是创建闭包(这是JavaScript语言的特性之一),并且还可以构建命名空间,以减少全局变量的使用。
例如:
var a=1;
(function()(){
var a=100;
})();
alert(a); //弹出 1
更多 闭包和匿名函数 可查看 Javascript的匿名函数与自执行 这篇文章。
<摘自:http://www.cnblogs.com/joey0210/p/3408349.html>
举一反三:
不难发现,如下代码也是可以的:
<script>
var str = function(){
var s1 = "a";
var s2 = "b";
return s1+s2;
}();
alert(str);
</script>
执行结果:弹出"ab"。
2. js中this指代的对象
js 中this指代的是当前的上下文对象,即离他最近的一个function对象(也就是js中的类)。
<script type = "text/javascript">
(function() { var data = {
movePage: function() {
this.arg = 1;
this.dowhat = {
method1: function() {
alert("1当前对象的arg属性值:" + this.arg);
},
method2: function() {
alert("2当前对象的arg属性值:" + this.arg);
}
};
}
}; var test = new data.movePage();
// 我们通常的调用函数的形式。alert的值为undefined
test.dowhat.method1();
// 改变this对象指代的当前上下文。
// 也就是说:这句代码会执行method1方法,并且将this指代的当前上下文指到test对象,即movePage函数。
// 而movePage函数中arg的值为1,那么alert后的值为1
test.dowhat.method1.call(test); })();
</script>
执行结果:第一次弹出:undefined 第二次弹出:1
小技巧:
我们可以通过使用alert(xxx);来看一个对象是什么类型的。我们可以得到类似于下面的alert框

通过上面的描述和例子,我们就不难发现:
例1:
- $("#textbox").hover(
- function() {
- this.title = "Test"; // 也可以通过$(this)拿到jquery对象,然后使用$(this).attr("title", "Test");来达到目的
- }
- );
上面的例子中this对象指向的是js中原生的js对象,所以this也就是js中原生的dom对象。
例2:
jquery插件编写里总是会用到如下的代码:
(function( $ ) {
$.fn.myPlugin = function() {
// Do your awesome plugin stuff here
return this.each(function(){.......});//主要为了能够链式调用,将jqery对象return
};
})( jQuery );
这里的this指向的是myPlugin对象,也就是jquery对象,所以它可以直接使用jquery的each方法
js封装 与 js高级用法 问题集合的更多相关文章
- 用require.js封装原生js轮播图
index.html页面: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 【转】Vue.js中 watch 的高级用法
假设有如下代码: <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type=&q ...
- Vue.js中 watch 的高级用法
假设有如下代码: <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type=&q ...
- js中“||”和“&&”的高级用法
例1:用于赋值&&:从左往右依次判断,当当前值为true则继续,为false则返回此值(是返回未转换为布尔值时的原值哦)|| : 从左往右依次判断,当当前值为false则继续,为tru ...
- 原生JS封装 toast 弹层,自动关闭
由于公司业务需求,要一个公共toast ,下面是自己封装的一个. css: .toast { text-align: center; min-height: 70px; width: 220px; c ...
- JS封装动画框架,网易轮播图,旋转轮播图
JS封装动画框架,网易轮播图,旋转轮播图 1. JS封装运动框架 // 多个属性运动框架 添加回调函数 function animate(obj,json,fn) { clearInterval(ob ...
- JsQuick--个人封装的Js库
JsQuick 该库为本人封装的Js库,尚未进行浏览器兼容 /** * 快速框架 版本:1.0.0 * 日期:2015.02.26 * 作者:简楚恩 */ /** * 快速获取控件类 */ var $ ...
- 【JavaScript框架封装】使用原生js封装的类似于JQuery的框架及核心源码分享(多文件版本)
这个版本的JQuery是对上一个版本的JQuery,使用了require.js进行了二次封装,基本上把前面的每一个框架封装成为一个单独的模块,最终的目录结构如下: 由于代码量和目录比较多,这个封装好的 ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
随机推荐
- OSGi 的核心配置、动态化及问题
一.OSGi的核心组件Bundle,与java中jar包的差别就是元数据配置: 常用的Bundle元数据定义: a) Bundle-Activator:定义Activator的实现全 ...
- C#配置升级
void ConvertProject() { List<BaseProjectConverter> convertors = new List<BaseProjectConvert ...
- js定义变量需赋予初始值
这是console.log打印出来的日志,就是多了一个undefined 日志: hitTableObjectID:undefinedbfa4be7b-32fc-459a-9092-ecde316b3 ...
- oracle闪回使用以及删除存储过程恢复
oracle恢复删除的数据 恢复删除的存储过程 SELECT * FROM dba_source as of timestamp (systimestamp -interval'600'second ...
- Visual Studio 文件没发布出来
解决办法是选择文件打开属性窗口找到生成操作,选项选择"内容",重新发布,OK,问题解决.
- Smarty 由 2.X升级到3.X遇到的问题
首先这是一个大概4年前做的PHP项目,使用的是Zend Framework 1 + Smarty 2 , 已经很多年没有动过了, 最近抽风了,把这个项目要玩改版.拿出来改改吧. ZF 升级2这事,还是 ...
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)转
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
- final,static
如果输入参数在方法体执行过程中,强制不能被修改,那么参数类型前加final比较安全. final修饰的函数会被编译器优化,优化意味着编译器可能将该方法用内联(inline)方式载入.final修饰变量 ...
- 正在调用的 ServicedComponent 配置不正确(请使用 regsvcs 重新注册)
问题: 正在调用的 ServicedComponent 配置不正确(请使用 regsvcs 重新注册) 方法1: 我用的是64位操作系统.IIS中,启用32位应用程序设置为false.这样就可以了 ...
- EnterpriseLibrary之Caching应用
http://blog.csdn.net/linux7985/article/details/6239433 http://cache.baiducontent.com/c?m=9f65cb4a8c8 ...