jquery变量var的使用

变量var的使用

js的变量没有类型

                    var $li = $('#' + file.id),
                        $percent = $li.find('.progress span');
                    //console.log("percentage:", percentage);
                    // 避免重复创建
                    if (!$percent.length) {
                        $percent = $('<p class="progress"><span></span></p>')
                            .appendTo($li)
                            .find('span');
                    }

如果是null不会进入if

如果是一个数组会进入

空字符串不会进入

如果是undefined不会进入

如果是1会进入

如果是0不会进入

如果是字符串1也会进入

ES6 改变了现状, 引入了新的 let 关键字, 提供了除 var 以外的另一种变量声明方式。

let 关键字可以将变量绑定到所在的任意作用域中(通常是 { .. } 内部)。 换句话说, let为其声明的变量隐式地了所在的块作用域。

与var不同的是,它声明的变量只能是全局或者整个函数块的换句话,块级 == { }

let 声明的变量只是在其声明的块或者子块中可用,这一点,与var相似。二者的主要区别在于var声明的变量的作用域是整个封闭函数,而let声明的作用域是块。

 1 function varTest() {
 2     var x = 1;
 3     if (true) {
 4     var x = 2;  // 同样的变量!
 5     console.log(x);  // 2
 6     }
 7     console.log(x);  // 2
 8 }
 9 
10 function letTest() {
11     let x = 1;
12     if (true) {
13     let x = 2;  // 不同的变量
14     console.log(x);  // 2
15     }
16     console.log(x);  // 1
17 }

当用到内部函数时候,let 会让你的代码更加简洁。

 1 var list = document.getElementById('list');
 2 
 3 for (let i = 1; i <= 5; i++) {
 4     let item = document.createElement('li');
 5     item.appendChild(document.createTextNode('Item ' + i));
 6 
 7     item.onclick = function(ev) {
 8       console.log('Item ' + i + ' is clicked.');
 9     };
10     list.appendChild(item);
11 }
12 
13 // to achieve the same effect with 'var'
14 // you have to create a different context
15 // using a closure to preserve the value
16 for (var i = 1; i <= 5; i++) {
17     var item = document.createElement('li');
18     item.appendChild(document.createTextNode('Item ' + i));
19 
20     (function(i){
21     item.onclick = function(ev) {
22       console.log('Item ' + i + ' is clicked.');
23     };
24     })(i);
25     list.appendChild(item);
26 }

以上示例的工作原理是因为(匿名)内部函数的五个实例引用了变量i的五个不同实例。注意,如果将let 替换为 var, 则它将无法正常工作,因为所有内部函数都将返回相同的i,6是最终值。此外我们可以通过将创建新元素的代码移动到每个循环的作用域来保持循环更清晰。

在程序或者函数的顶层,let 并不会像var 一样在全局对象上创建一个属性,比如:

1 var x = "apple";
2 let y = "apple";
3 console.log(this.x);  //'apple'
4 console.log(this.y);  //undefined

在处理构造函数的时候,可以通过let 绑定来共享一个或者多个私有成员,而不使用闭包:

 1 var Thing;
 2 {
 3     let privateScope = new WeakMap();
 4     let counter = 0;
 5 
 6     Thing = function(){
 7         this.someProperty = 'foo';
 8         privateScope.set(this, {
 9             hidden: ++counter,
10         });
11     };
12 
13     Thing.prototype.showPublic = function(){
14         return this.someProperty;
15     };
16 
17     Thing.prototype.showPrivate = function(){
18         return privateScope.get(this).hidden;
19     };
20 }
21 
22 console.log(typeof privateScope);   //undefined
23 
24 var thing = new Thing();
25 console.log(thing);                //Thing { someProperty: 'foo' }
26 console.log(thing.showPublic());   //foo
27 console.log(thing.showPrivate());  //1

当在块中使用时,let 将变量的作用域限制为该块。注意var 的作用域在它被声明的函数内区别。

 1 var a = 1;
 2 var b = 2;
 3 
 4 if(a === 1){
 5     var a = 11;
 6     let b = 22;
 7 
 8     console.log(a);   // 11
 9     console.log(b);   // 22
10 }
11 console.log(a);   // 11
12 console.log(b);   // 2

总之,let 的作用域是自己最近的{}

		var names = ["00:00","23:00","22:00","21:00","20:00","19:00","18:00","17:00","16:00","15:00","14:00","13:00","12:00","11:00","10:00","09:00","08:00","07:00","06:00","05:00","04:00","03:00","02:00","01:00"];
		var url = CONTEXT_PATH +"/cusviews/dev/getRadarChartName";
		var param = {
				deviceCode:deviceCode
		}
		var retData = $.getData(url,param)
		if(1000!=retData.status){
			return;
		}
		var data = retData.data;
		if(null==data){
			return;
		}
		
		var rlt = {
				"data" : []
			};
		var rltdata = [];
		var dataList = new Array();
		
		function isInArray(arr,value){
		    for(var i = 0; i < arr.length; i++){
		        if(value === arr[i]){
		            return true;
		        }
		    }
		    return false;
		}
		
		$.each(data.textlist,function(j,k){
			let obj = {};
			if(isInArray(names,k.substring(11,16))){
				obj.text = k.substring(11,13);
			}else{
				obj.text = "";
			}
			obj.max = data.maxlist[j];
			rlt.data.push(obj);
		})
window.onload = function()
{
    var sum = 0;
    for (var i = 0;i <10;i++)
    {
        sum += i;   

    }
    alert(sum);
    alert("i="+i);
}
</script>
--------------------- 
上面的代码可输出i
<script>
window.onload = function()
{
    var sum = 0;
    for (let i = 0;i <10;i++)
    {
        sum += i;   

    }
    alert(sum);
    alert("i="+i);
}
</script>
--------------------- 
i未定义

è¿éåå¾çæè¿°

let具有自己的块级作用域,所以for循环转一次,创建一个块级作用域,思路与闭包相同,分别储存了5个不同的i变量。

var lis = document.getElementsByTagName("li");
for(let i=0; i<lis.length;i++){
lis[i].onclick = function(){
alert(i);
}
}
(function () {

})();

(function ($) {

})
(jQuery)
(function (window, $) {

})(window, jQuery);

(function (window, $, undefined) {

})(window, jQuery);

var _util = function () {

       this.QueryFormSerializeArray = function (domid) {
            var form = null;
            if (typeof (domid) === "string")
                from = $('#' + domid);
            else
                from = domid;
            var p = from.serializeArray();
            var s = $.map(p, function (n) {
                var t = $("#" + n.name);
                if (t.size() == 0)
                    t = from.find("*[textboxname='" + n.name + "']");
                var query = {};
                var s = $.trim(t.attr('data-query'));
                if (s) {
                    if (s.substring(0, 1) != '{') {
                        s = '{' + s + '}';
                    }
                    query = (new Function('return ' + s))();
                    if (query.filed) {
                        query.name = query.filed;
                        //query.remove("filed");
                    }
                }
                //console.log(query);
                return $.extend({}, n, query);
            });

            return s;
        };
        /**
         * 序列化Form 返回字符串
         * @param  {string} domid
         * @return {any} 序列化后的
         */
        this.QueryFormSerializeString = function (domid) {
            var s = this.QueryFormSerializeArray(domid);
            var strpars = JSON.stringify(s);
            return strpars;
        };
};
    $Core.util = new _util();

 

function ($),直接进入

	$.extend({
		renderSelectorMyf : function(options){
			return new renderSelectorMy(options);
		}
	});

new实例化的时候进入方法

;(function($){   
	debugger;
    var options = {
    		fieldCode: "gfyId",
            url: "../../Security/selector/user/PublicServiceUserList.html?s=" + Math.random(),
            multi: false,
            code: "gfyId,gfyIdName",
            keyRespField: "gfyId,id",
            dictCode: "publicserviceName",
            area: ['90%','90%']
    };
    /*引用查询选择*/
	function renderSelectorMy(options){
		
		var defaults = {};
		this.settings = $.extend({},defaults,options);
		var $domObj = $("#" + this.settings.fieldCode + "-popSelector");
		this.settings.url = $domObj.attr("action") ? $domObj.attr("action") : this.settings.url;
		this.settings.multi = $domObj.attr("multi") ? $domObj.attr("multi") : this.settings.multi;
		this.settings.code = $domObj.attr("codeAndName") ? $domObj.attr("codeAndName").split(",") : this.settings.code.split(",");
		this.settings.keyRespField = this.settings.keyRespField ? this.settings.keyRespField.split(",") : "";
		this.init();
	}
	
	//为函数添加原型链上的方法
	renderSelectorMy.prototype = {
		init: function(){
			
			var _self = this,
				_keys = _self.settings.code;
			
			$("input[name='" + _keys[0] +"']").parent().parent().find("button").unbind('click').bind('click', function(){
				var action = "_self." + $(this).attr("action");
				eval(action);
			});

		},
		querySelect : function(thi,event){
			
			var _self = this;
			var url = _self.settings.url;
			var _keys = _self.settings.code;
			var keyRespField = _self.settings.keyRespField;
			var id = keyRespField[1];
			var ids = $("input[name='" + _keys[0] +"']").val();

			if(url.indexOf("?") != -1) {
                url = url + "&" + id + "="+ids;
            }else {
                url = url + "?" + id + "="+ids;
			}
			$Core.UI.openDialog("selwind", url,
	            {
	                title: "列表选择",
	                width: _self.settings.area[0],
	                height: _self.settings.area[1],
	                onClose: function () {
	                }
	            });

			
		},
		echoSelect : function(_data){
			var _self = this;
			var data = _data.data,
				_keys = _self.settings.code,
				_rkeys = _self.settings.keyRespField,
				dictName = "",
				dictCode = _self.settings.dictCode;
			$Core.DicCache.initDictionary(dictCode,function(dicts){
				var _dicts = dicts;
				if(dicts && dicts.data){
					var dictDatas = dicts.data[dictCode];
					for(var i=0,len=dictDatas.length; i<len; i++){
						var item = dictDatas[i];
						if(data[_keys[0]] == item[_rkeys[1]]){
							var itemName = item.text;
							dictName += itemName +",";
						}
					}
					$("span input:text", $("div #" + _keys[0] + "-popSelector")).val(dictName.substr(0,dictName.length-1));
				}else{
					$("span input:text", $("div #" + _keys[0] + "-popSelector")).val(dictName);
				}
				
				
			})
		},
		selectResultAfterCallback: function(checkRlt){
			
			var _self = this,
				multi = _self.settings.multi;
			if(checkRlt.length == 0){
				$Core.UI.message.warning("选请选择数据!");
			}
			
			if(!multi && checkRlt.length != 1){
				$Core.UI.message.warning("单选,请选择一条数据!");
			}
			
			var _keys = _self.settings.code,
			code = "",
			name = "";
			if(!_self.settings.multi){
				code = checkRlt[0]['code'];
				name = checkRlt[0]['name'];
			}else{
				var _code = "",
					_name = "";
				for(var i=0,len=dataArr.length; i<len; i++){
					_code += checkRlt[i]['code'] +",";
					_name += checkRlt[i]['name'] +",";
				}
				code = _code.substring(0,_code.length-1);
				name = _name.substring(0,_name.length-1);
			}
		
			//给input[name='']:text 赋值
			address = checkRlt[0]['address'];
			headPerson = checkRlt[0]['headPerson'];
			headPersonPhone = checkRlt[0]['headPersonPhone'];
			customerType = checkRlt[0]['customerType'];
			$("input[name='address']").val(address);
			$("input[name='headPerson']").val(headPerson);
			$("input[name='headPersonPhone']").val(headPersonPhone);
			/*$("input[name='customerType']").val(customerType);*/
			$("#customerType").combobox("setValue", customerType);
			$("input[name='" + _keys[0] + "']:hidden").val(code);
			$("span input:text", $("div #" + _keys[0] + "-popSelector")).val(name);
			
			$(".panel-tool-close").trigger('click');
		}
		
	}	
	
	  //扩展jquery类方法
	$.extend({
		renderSelectorMyf : function(options){
			return new renderSelectorMy(options);
		}
	});
})(jQuery)
debugger;	
    renderSelector = $.renderSelectorMyf({
        fieldCode: "gfyId",
        url: "../../Security/selector/user/PublicServiceUserList.html?s=" + Math.random(),
        multi: false,
        code: "gfyId,gfyIdName",
        keyRespField: "gfyId,id",
        dictCode: "publicserviceName",
        area: ['90%','90%']
    });
	

    _self.renderSelectors = [renderSelector];

 

 

 

 

 

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
jQuery中,变量的作用域遵循JavaScript的作用域规则。 在jQuery中,可以使用`var`关键字声明变量。声明的变量的作用域可以是全局作用域或局部作用域。 1. 全局作用域:在任何函数外部声明的变量都具有全局作用域,可以在整个脚本中访问。这意味着在任何地方都可以使用这些变量,包括不同的函数和事件处理程序。 ```javascript var globalVariable = 'I am a global variable'; function foo() { console.log(globalVariable); } foo(); // 输出:I am a global variable ``` 2. 局部作用域:在函数内部声明的变量具有局部作用域,只能在声明它们的函数内部访问。这意味着这些变量只在其所在的函数范围内可见。 ```javascript function bar() { var localVariable = 'I am a local variable'; console.log(localVariable); } bar(); // 输出:I am a local variable console.log(localVariable); // 报错:localVariable is not defined ``` 需要注意的是,在JavaScript中,没有块级作用域。因此,在使用`if`语句、循环等代码块时,声明的变量仍然属于函数作用域。 ```javascript function baz() { if (true) { var blockVariable = 'I am a block variable'; } console.log(blockVariable); } baz(); // 输出:I am a block variable ``` 总结起来,jQuery中的变量作用域遵循JavaScript的作用域规则。在函数内部声明的变量具有局部作用域,可以在整个函数内部访问。在函数外部声明的变量具有全局作用域,可以在整个脚本中访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wespten

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值