SQLSERVER 에는 다양한 시스템 테이블이 있으며, 이걸 활용하면 많은 노가다(?)성 일들을 줄일 수가 있다.

그중에 데이터베이스안에 있는 사용자 테이블의 데이터를 모두 삭제할 때 해당 쿼리를 얻는 방법이다.


SELECT * FROM SYS.SYSOBJECTS

-- 해당 쿼리를 실행해보면 다양한 오브젝트의 정보를 얻을 수 있다.


그렇다면 DELETE 쿼리를 얻기 위해 아래와 같이 응용할 수가 있다.

SELECT 'DELETE FROM ' + [NAME] FROM SYS.SYSOBJECTS WHERE [xtype] = 'U' 

-- 해당 쿼리를 실행하면 결과는 DELETE 쿼리 목록이 조회 된다. 즉 노가다를 줄일 수 있다.!

-- U 는 사용자 테이블만 조회하기 위한 조건이다.


- xtype 의 종류

AF = 집계 함수(CLR)
C = CHECK 제약 조건
D = 기본값 또는 DEFAULT 제약 조건
F = FOREIGN KEY 제약 조건
L = 로그
FN = 스칼라 함수
FS = 어셈블리(CLR) 스칼라 함수
FT = 어셈블리(CLR) 테이블 반환 함수
IF = 인라인 테이블 함수
IT = 내부 테이블
P = 저장 프로시저
PC = 어셈블리(CLR) 저장 프로시저
PK = PRIMARY KEY 제약 조건(K 유형)
RF = 복제 필터 저장 프로시저
S = 시스템 테이블
SN = 동의어
SQ = 서비스 큐
TA = 어셈블리(CLR) DML 트리거
TF = 테이블 함수
TR = SQL DML 트리거
TT = 테이블 유형
U = 사용자 테이블
UQ = UNIQUE 제약 조건(K 유형)
V = 뷰
X = 확장 저장 프로시저


아래의 링크를 통해 좀더 sys.sysobjects 에 대해서 자세히 살펴볼 수 있다.

MSDN 의 sys.sysobjects 설명 링크

'IT > 데이터베이스' 카테고리의 다른 글

mssql recovery mode 확인 및 변경  (0) 2014.11.25

/*

 * IMC 의 장비 가동상태바 를 도시하기 위한 플러그인

 * by MHD

 */


$.widget( "imc.barchart", {

// default options

options: {

margin : 20,

statusColor: {

auto : "#219244"

, idling : "#eb9934"

, setup : "#595858"

, change : "#00a0e9"

, alarm : "#ca1134"

, off : "#9e9e9f"

, defaultColor : "#FFFFFF"

},

oee : {

second : "second"

, startDateTime : "start_date"

, status : "status"

},

tickColor : "#AAAAAA",

tickWidth : 1,

dutyTime : "00:00",

hourTxt : '시간' ,

minTxt : '분' ,

toolTipPosition : 'up', // tooltip의 위치 up, down

isShowTooltip : true ,

isLimitMoveTooltip : false,

// callbacks

onChangedDate: null ,  //function(e, addDays){}  param  +1 다음날, -1 전날 날짜 변환 이벤트 발생 function(e, addDays) 

// 선언되지 않으면 날짜 변경이 되지 않음 .. 즉 당일꺼만 볼 경우... 날짜이동이 없는 경우

onClickBarChart : null ,// functiono(e, timeTxt) 클릭시 콜백 timeTxt 값을 리턴

onChangedViewType : null ,//function(e, t){}  t = 'day', 'hour', 'min'

onChangedTooltip : null, // functiono(e, left, timeTxt, isShow) left 위치좌표, top 은 필요없음, isShow 로 마우스 over 상태 확인, txt 로 시간 체크

onDrawBar : null // function(e, oeeResult) oeeResult 안에는 각 상태별 시간과 count 값이 json 구조로 저장되어 있음

},

      

_oeeType : {

day:{

rate:24*60*60, 

txt: function(){

this.options.hourTxt;

return 24 + this.options.hourTxt;

},

getPointTimeTxt:function(lastPoint, width){ // 속도 때문에 width 를 매번 계산하지 않는다 차이가 좀남

var rate =this._cunrrentType.rate/60/width;

return this.DateUtil.DateType.Min.execute(this._convertPx(lastPoint*rate + this.oeeTimeTxt[0].data("timepixel")));

}

} , 

hour:{

rate:60*60, 

txt: function(){

this.options.hourTxt;

return 1 + this.options.hourTxt;

},

getPointTimeTxt:function(lastPoint, width){

return this._oeeType.day.getPointTimeTxt.call(this, lastPoint, width);

}

} , 

min:{

rate:12*60, 

txt: function(){

this.options.hourTxt;

return 12 + this.options.minTxt;

},

getPointTimeTxt:function(lastPoint, width){

var rate =this._cunrrentType.rate/width;

var x = lastPoint*rate + this.oeeTimeTxt[0].data("timepixel")*60;

return this.DateUtil.DateType.Second.execute(x >= 60*60*24 ? x%(60*60*24) : x, true);

}

},

_cunrrentType : null,

_lastData : [],

// the constructor

_create: function() {

this._setCurrentType("day");

this.oeeBar = $("<div>",{"class":"imc-oee-bar"});

this.oeeBar.css({height : this.element.height()-30, width:this.element.width()-this.options.margin*2, "marginLeft":this.options.margin});

this.oeeTimeTick = $('<svg  xmlns="http://www.w3.org/2000/svg" height=50 width='+this.element.width()+'>');

this.tooltip = $("<div>",{"class":"imc-oee-tooltip " + this.options.toolTipPosition}).append(this._tooltipHtml())

this.oeeTimeTxt = [];

this.element

 .addClass( "imc-oee" )

 .disableSelection().append(this.oeeBar).append(this.oeeTimeTick).append(this.tooltip);

this._drawTimeTick();

this.tooltipManager.initialize.call(this);

},

_refresh: function() {

    this._drawbar(this._lastData, this.oeeTimeTxt[0].data("timepixel"));

this.tooltip.empty().append(this._tooltipHtml());

this.tooltipManager.initialize.call(this);

},

 

_destroy: function() {

this.oeeBar.remove();

this.oeeTimeTick.remove();

this.tooltip.remove();

this.element

 .removeClass( "imc-oee-bar" )

 .enableSelection()

 .css( "background-color", "transparent" ).empty();

},

_setOptions: function() {

this._superApply( arguments );

this._refresh();

},

_setOption: function( key, value ) {

if("dutyTime" == key && !/[0-9]{2}.[0-9]{2}/.test(value)){

return;

if(/oee|statusColor/.test(key)){

value = $.extend({}, this.options[key], value);           

}

this._super( key, value );

},

_drawTimeTick : function(){

var w = this.element.width();

var h = this.element.height();

var style = "stroke:"+this.options.tickColor+";stroke-width:"+this.options.tickWidth

this.oeeTimeTick.append(this._makeSVG('line', {

x1 : this.options.margin ,

x2 : w-this.options.margin,

y1 : 0 ,

y2 : 0 ,

style : style

}));

for(var i = 0 ; i <= 24 ; i++){

var x = this.options.margin + (w-this.options.margin*2)/24*i;

this.oeeTimeTick.append(this._makeSVG('line', {

x1 : x ,

x2 : x ,

y1 : 0 ,

y2 : 10 ,

style : style

}));

if( i % 6 == 0 ) {

this._drawTimeTxt(x, i / 6, this._createTime(x));

}

}

this._updateTimeTxt(0, this.oeeTimeTxt[0].data("orgpixel"));

},

_drawTimeTxt : function(x, index, $time){

var times = this.options.dutyTime.split(":");

var hour = parseInt(times[0]) + index * 6;

hour = hour > 24 ? hour % 24 : hour;

$time.data("orgpixel", parseInt(times[0])* 60 + parseInt(times[1]));

$time.data("timepixel", parseInt(times[0])* 60 + parseInt(times[1]));

this.element.append($time);

},

_createTime : function(x){

this.oeeTimeTxt[this.oeeTimeTxt.length] = $("<time>",{"class":"imc-oee-timetxt",text:"00:00",

style :["left:", (x-18), "px;top:", ( this.element.height()-10), "px;"].join("")});

return this.oeeTimeTxt[this.oeeTimeTxt.length-1];

},

_updateTimeTxt : function(x, startTime){

var rate = this._cunrrentType.rate/60, DateUtil = this.DateUtil, _convertPx = this._convertPx;

startTime += startTime < this._getSecond(this.options.dutyTime)/60 ? 1440 : 0;

x = parseInt(x/rate) * rate + (startTime ? startTime : 0), rate /= 4;

$.each(this.oeeTimeTxt, function( index, $this ) {

var px = x + index * rate;

$this.text(DateUtil.getString(DateUtil.DateType.Min, _convertPx(px), false));

$this.data("timepixel", px)

});

},

_findStartPoint : function(html, data, startMin, w, status, oeeResult){

var startSec = startMin*60, seconds = 0, dutySec = this._getSecond(this.options.dutyTime), pixel = 0;

startSec += (startSec < dutySec ?  60*60*24 : 0)

for (var i = 0, len = data.length; i < len; i++) {

seconds = this._getSecond(data[i][this.options.oee.startDateTime])

seconds = startSec > seconds && dutySec > seconds ? (seconds += 60*60*24) : seconds;

if(seconds > startSec){

pixel = (seconds- startSec)/this._cunrrentType.rate * w;

if(i > 0){

status = data[i-1][status];

this._addOeeResult(oeeResult[status], seconds- startSec);

}else{

status = "defaultColor";

}

return this._checkOverFirstPixel(html, status, pixel, w, i)

}else if(i == len -1 && seconds < startSec && startSec < seconds + parseInt(data[i][this.options.oee.second])){

pixel = (seconds + parseInt(data[i][this.options.oee.second])-startSec)/this._cunrrentType.rate * w;

return this._checkOverFirstPixel(html, data[i][status], pixel, w, -1)

}

}

return {index : -1, pixel : pixel};

},

_checkOverFirstPixel : function(html, status, pixel, w, i){

if(pixel > w){ // pixel 이 넓이 보다 큰 경우

i = -1, pixel = w;

}

this._addbaritem(html, status, pixel, w);

return {index : i, pixel : pixel}

},

_drawbar : function(data, startMin) {

var html = [], w = this.oeeBar.width(), oeeResult = this._getOeeTemplete(), totalPixel = 0, pixel, leakPixel=0,

status = this.options.oee.status, second = this.options.oee.second, startDateTime = this.options.oee.startDateTime;


for (var i = 0, len = data.length; i < len; i++) {

if(i == 0 && (this.oeeTimeTxt[0].data("orgpixel") != startMin || this.oeeTimeTxt[0].data("orgpixel") != this._getSecond(data[i][startDateTime])/60)){

var first = this._findStartPoint(html, data, startMin, w, status, oeeResult);

totalPixel =+ first.pixel;

i = first.index;

if(first.index < 0) break;

}

pixel = (data[i][second]/this._cunrrentType.rate) * w;

if(totalPixel + pixel > w){

pixel = w - totalPixel;

this._addOeeResult(oeeResult[data[i][status]], parseInt(pixel*this._cunrrentType.rate/w));

this._addbaritem(html, data[i][status], pixel, w); 

break;

}

leakPixel += pixel;

pixel = leakPixel - leakPixel%1;

leakPixel = leakPixel - pixel;

totalPixel += pixel;

if(len - 1 == i && leakPixel > 0){ // 잃어버린 1px 을 찾아서

pixel += 1;

}

this._addOeeResult(oeeResult[data[i][status]], data[i][second]);

this._addbaritem(html, data[i][status], pixel, w); 

}

this._bindEvent(this.oeeBar.empty().append(html.join('')).children(":not(.defaultColor)"));

if(this._cunrrentType == this._oeeType.day){ // day 는 굳이 다시 그릴필요 없음

this._trigger("onDrawBar", null , [oeeResult]);

}

},

_bindEvent: function(bar){

bar.on({mousemove: $.proxy(this.tooltipManager.calculatePoint, this), 

mouseleave: $.proxy(this.tooltipManager.hideToolTip, this), 

click : $.proxy(this.tooltipManager.clickPoint, this),

dblclick : $.proxy(this.tooltipManager.nextProgress, this)

}); // 이벤트는 우선 그냥 다 tooltip 에서 처리하자

},

_addbaritem : function(htmlarray, status, pixel, width) {

if(pixel > 0){

htmlarray.push('<span class="', status,  '" style="width:', pixel, 'px;background-color:',this.options.statusColor[status] ,'"></span>');

}

},

_makeSVG :function(tag, attrs) {

        var el= document.createElementNS('http://www.w3.org/2000/svg', tag);

        for (var k in attrs)

            el.setAttribute(k, attrs[k]);

        return el;

    },

_tooltipHtml : function(){

return ['<time>00:00</time>','<button type="button" data-value="day" class="on"><span>',this._oeeType.day.txt.call(this),'</span></button>'

            ,'<button type="button" data-value="hour"><span>',this._oeeType.hour.txt.call(this),'</span></button>'

            ,'<button type="button" data-value="min"><span>',this._oeeType.min.txt.call(this),'</span></button>', '<div class="arrow">'].join("");

},

_addOeeResult : function(oeeResult, sec){

if(sec > 0){

oeeResult.sec += parseInt(sec);

oeeResult.cnt ++;

}

},

_getOeeTemplete : function(){

var result = {}

for(var key in this.options.statusColor){

result[key] = { sec : 0 , cnt : 0 };

}

return result;

},

_setCurrentType : function(t){

if(this._oeeType[t]){

this._cunrrentType = this._oeeType[t];

}

},

_pad : function(value, length) {

value = String(value);

length = parseInt(length,10) || 2;

while (value.length < length)  { value = '0' + value; }

return value;

},

// 24시간 기준 pixel 변환

_convertPx : function(val){

val = (val >= 1440) ? val%1440 : val;

val = (val < 0) ? 1440 + val%1440 : val;

return val;

},

DateUtil : (function(){

var sep = ':';

var DateType = {

Min : { execute :

function(min, useSec){

       var hh = parseInt(min / 60);

min %= 60;

   return [pad(hh,2),sep ,pad(parseInt(min),2) ,(useSec ? (sep+"00") : "")].join("");

}

},

Second : { execute :

function(sec, useSec){

       var hh = parseInt(sec / 3600);

sec %= 3600;

   var mm = parseInt(sec / 60), ss = parseInt(sec % 60);

   return [pad(hh,2), pad(mm,2), useSec ? pad(ss,2) : ""].join(sep);

}

},

Hour :{ execute :

function(hour, useSec){

   return [pad(parseInt(hour),2), "00", useSec ? "00" : ""].join(sep);

}

},

}

,getString = function(fn, val, useSec){

return fn.execute.call(this, val, useSec=== undefined ? true : useSec);

}

,pad = function(value, length) {

value = String(value);

length = parseInt(length,10) || 2;

while (value.length < length)  { value = '0' + value; }

return value;

}

return{

DateType : DateType

,getString : getString

}

})(),

    _getdate : function(datestring) {

var extracted = datestring.match(/([0-9]{4}).([0-9]{2}).([0-9]{2}) ([0-9]{2}).([0-9]{2}).([0-9]{2})/);

return extracted && extracted.length > 6 ? new Date(extracted[1], parseInt(extracted[2])-1, extracted[3], extracted[4], extracted[5], extracted[6]) : new Date();

},

_getSecond : function(datestring) { //XX:XX , XX:XX:XX 둘다 처리 굳이 정규식 필요없음, 횟수가 많을 경우 정규식이 더느림

var extracted = datestring.split(/[-: ]/);

var len = extracted.length;

return extracted && extracted.length > 1 ? (extracted.length % 3 == 0 ? 

parseInt(extracted[len-3])*60*60 + parseInt(extracted[len-2])*60 + parseInt(extracted[len-1])

: parseInt(extracted[len-2])*60*60 + parseInt(extracted[len-1])*60 ) : 0;

},

_getTxt : function(lastPoint, width){

return this._cunrrentType.getPointTimeTxt.call(this, lastPoint, width);

},

_update : function(startMin){

this._updateTimeTxt(0, startMin);

this._drawbar(this._lastData, startMin);

},

// type : "min", "hour", "day"

setData : function(data, t, startDateTime){

    this._lastData = data;

this.setStartDateTime(t, startDateTime);

    },

    setStartDateTime : function(t, startDateTime){

    var startMin = t == "day" ? this.oeeTimeTxt[0].data("orgpixel") :

    (startDateTime !== undefined ? this._getSecond(startDateTime)/60 : this.oeeTimeTxt[0].data("timepixel"));

this._setCurrentType(t);

    this._updateTimeTxt(0, startMin);

    this._drawbar(this._lastData, startMin);

    },

    clear : function(){

    this.setData([], "day", this.options.dutyTime);

    },

    next : function(){

    if( this._getSecond(this.options.dutyTime)/60 +1440 <= this.oeeTimeTxt[0].data("timepixel") + this._cunrrentType.rate/60){

    if($.isFunction( this.options.onChangedDate)){

    this._trigger("onChangedDate", null , [+1]);

        this._updateTimeTxt(0, this.oeeTimeTxt[0].data("orgpixel"));

        console.log("trigger onChangedDate  +1 day")

    }else if(this._cunrrentType != this._oeeType.day){ // day 는 굳이 다시 그릴필요 없음

    this._update(this.oeeTimeTxt[0].data("orgpixel"));

    }

    }else{

    this._update(this.oeeTimeTxt[0].data("timepixel") + this._cunrrentType.rate/60);

    }

       

    },

    prev : function(){

    if(this._getSecond(this.options.dutyTime)/60 > this.oeeTimeTxt[0].data("timepixel") - this._cunrrentType.rate/60){

    if($.isFunction( this.options.onChangedDate)){

    this._trigger("onChangedDate", null , [-1]);

    this._updateTimeTxt(0, this.oeeTimeTxt[0].data("timepixel") - this._cunrrentType.rate/60);

    console.log("trigger onChangedDate  -1 day");

    }else if(this._cunrrentType != this._oeeType.day){ // day 는 굳이 다시 그릴필요 없음

    this._update(this.oeeTimeTxt[0].data("orgpixel") + 1440 - this._cunrrentType.rate/60);

    }

    }else{

    this._update(this.oeeTimeTxt[0].data("timepixel") - this._cunrrentType.rate/60);

    }

    },

    

    tooltipManager : (function(){

var displayed = false , hideToolTiptimer = [], lastPoint, width, pLeft, tWidth, tHWidth, width, aLeft, 

$parent, $tooltip, $time, $tabs, $arrow;

// $.proxy 이부분에서는 빼고 내부변수로 바꾸자 굳이 proxy 사용할 이유가 없음(오히려 비효율적)

var initialize = function(){

$parent = this, $tooltip =this.tooltip, $time = $tooltip.find('time'), $tabs = $tooltip.find('button'),$arrow = $tooltip.find('.arrow');

aLeft = $arrow.position().left, pLeft = $tooltip.parent().offset().left, tWidth = $tooltip.width(), tHWidth = tWidth/2, width =this.oeeBar.width();

$tooltip.on({mouseenter: cancelHideToolTip, mouseleave: $.proxy(hideToolTip, this)});

$tabs.click($.proxy(function(e){

var $this = $(e.currentTarget), index = $this.index()-1, t = $this.data("value"),x = 0, rate = this._cunrrentType.rate;

this._setCurrentType(t); 

if(t == 'day'){

            x = this.oeeTimeTxt[0].data("orgpixel");

            }else if(t == 'hour' && this._cunrrentType.rate > rate){

this._setCurrentType(t);

x = this.oeeTimeTxt[0].data("timepixel");

x = x - x % 60;

            }else{

            x = lastPoint * rate/60/width;

                rate = this._cunrrentType.rate/60;

                x = parseInt(x/rate) * rate +this.oeeTimeTxt[0].data("timepixel");

            }

this._trigger("onChangedViewType", null , [t]);

$tabs.removeClass('on').eq(index).addClass('on');

this._update(x);

}, this));

}

, calculatePoint = function(e) {

if(this.options.isLimitMoveTooltip){

_calculateLPoint(e, this.options.margin + this.options.margin); //덧셈 속도때문에

}else{

$tooltip.css({left: e.clientX - pLeft - tHWidth});

}

lastPoint = e.clientX - pLeft- this.options.margin;

$time[0].innerHTML = this._getTxt(lastPoint, width);

if (this.options.isShowTooltip && !displayed) {

this.tooltip.show();

displayed = true;

}

cancelHideToolTip();

this._trigger("onChangedTooltip", null , [lastPoint, $time[0].innerHTML, true]);

}

, _calculateLPoint = function(e, fMargin) { // 속도가 왜 Math 함수가 더느릴까...

var x = e.clientX - pLeft - tHWidth;

var limit = width- tWidth + fMargin;

if(x > 0){

if(x < limit){

$tooltip.css({left:x});

$arrow.css({left:"50%"});

}else{

$tooltip.css({left:limit});

$arrow.css({left: x-limit+tHWidth});

}

}else{

$tooltip.css({left:0});

$arrow.css({left: x + tHWidth});

}

}

, hideToolTip = function(event) {

event.preventDefault()

hideToolTiptimer[hideToolTiptimer.length] = setTimeout( $.proxy(hideToolTipAction, this), 100);

}


, cancelHideToolTip = function(event) {

for(var i = 0, len = hideToolTiptimer.length; i < len ; i++){

clearTimeout(hideToolTiptimer[i]);

}

hideToolTiptimer = [];

}


, hideToolTipAction = function() {

$tooltip.hide();

this._trigger("onChangedTooltip", null , [-1, '', false]);

displayed = false;

}

, nextProgress = function(e){

            lastPoint = e.clientX - pLeft- this.options.margin;

var $next = $tabs.filter(".on").next("button");

if($next.length > 0 ){

$next.trigger("click");

}else{

$tabs.first().trigger("click");

}

}

, clickPoint = function(){

this._trigger("onClickBarChart", null , [this._getTxt(lastPoint, width)]);

}

, clear = function(){

$tabs.removeClass("on").eq(0).addClass("on");

};

return {

calculatePoint : calculatePoint

, hideToolTip : hideToolTip

, cancelHideToolTip : cancelHideToolTip

, nextProgress : nextProgress

, clear : clear

, clickPoint : clickPoint

, initialize : initialize

}

})()

});

'IT > jquery' 카테고리의 다른 글

JSON 바인딩하여 HTML 만들기  (0) 2016.01.25
jQuery 플러그인 화면 도시여부 체크  (0) 2016.01.20
[제이쿼리(jQuery)] lesson 6  (0) 2014.12.16
[제이쿼리(jQuery)] lesson 5  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 4  (0) 2014.11.24

ajax 로 호출하여 리턴된 데이터를 처리할 때 화면 도시를 위해서 html 에 바인딩 하는 경우가 많다.

 

아래의 예시와 같은 경우

 

var callBackAjax = function(data){

var html = "<div>" + data.tVal +"</div>"

/// .... 중략

}

 

이는 js 소스에 대한 복잡도 증가 및 가독성을 떨어트리게 된다.

이를 극복하기 위해 jquery 의 tmpl 을 사용하는 경우도 있다.

 

필자가 제작한것은 tmpl 과 유사한 간단한 jquery 플러그인이다.

(function( $ ) {

    $.fn.generateHtml = function(data) {

    var html = $(this).html();

var array = html.match(/@{(\w+[.]?)+}/g);

if(array == null){

return html;

}

for(var i = 0 , len = array.length ; i < len ; i++){

html = html.replace(array[i], findValue(array[i], data));

}

return html;

    },

    findValue = function(key, data){

key = key.replace(/(@{|})/g, '');

return reclusive(key.split(".") , data);

},

reclusive  = function(keys, data){

var result = data[keys[0]];

if(result === undefined || result === null){

return '';

}

if(keys.length > 1){

return reclusive( keys.slice(1), result);

}

return result;

};

}(jQuery));

 

 

 

사용법 예시

 

 // 사용할 HTML 의 구조를 만들고 ID 를 부여한다.

 // @{데이터의 key} 로 사용할 데이터를 명시한다.

<script id="templateTag" type="text">
    <div>
         <div> @{tVal} <div>
         <div> @{pVal} <div>
         <div> @{oee.tVal} <div>
         <div> @{oee.pVal} <div>
    </div>
</script>

 

<script>

$(function(){
 var testData = {tVal : 100, oee : {tVal:"233", pVal : "555"}} // 예시 데이터
 // pVal 값이 없는 경우는 공백입력됨
console.log($("#templateTag").generateHtml(testData)); 

})
</script>

 

실행 결과

    <div>
         <div> 100 <div>
         <div>  <div>
         <div> 233 <div>
         <div> 555 <div>
    </div>

 

 

 

 

'IT > jquery' 카테고리의 다른 글

누석 시간 바 차트 컴포넌트  (0) 2016.07.25
jQuery 플러그인 화면 도시여부 체크  (0) 2016.01.20
[제이쿼리(jQuery)] lesson 6  (0) 2014.12.16
[제이쿼리(jQuery)] lesson 5  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 4  (0) 2014.11.24

selector 된 요소가 주어진 부모창(스크롤을 가진)에서 보이는지 안보이는지에 대한 여부를 체크하는

간단한 플러그인 이다.(해당 플로그인은 Y 축만 체크한다 필요하면 X축 계산만 추가하면 된다)



/**

 * 현재 해당 요소의 도시여부를 체크하는 function

 * @param parent 

 */

(function( $ ) {

    $.fn.visible = function(parent) {

var $parent = $(parent);

var bHeight = $parent.height();

var bTop = $parent.offset().top;

var top = $(this).offset().top;

if(top >= bTop && top < (bTop + bHeight)){

return true;

}

        return false;

    };

}(jQuery));


사용예시>

$("#Test").visible(".bottom");



스크롤이 되는 영역안에서 브라우져 상에 사용자에게 보여지는 영역안에 있지를 체크한다.(Y축만 고려함)

스크롤을 가진 부모에 대한 셀렉터를 파라미터를 받지말고, 부모중 스크롤을 가진 요소를 찾아서 처리해도 된다.


ps> x 축 추가는 간단한 응용이기 때문에 생략한다.

'IT > jquery' 카테고리의 다른 글

누석 시간 바 차트 컴포넌트  (0) 2016.07.25
JSON 바인딩하여 HTML 만들기  (0) 2016.01.25
[제이쿼리(jQuery)] lesson 6  (0) 2014.12.16
[제이쿼리(jQuery)] lesson 5  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 4  (0) 2014.11.24

조금 더 java 의 format 과 유사한 형태이다.

String.form = function(str, arr) {
    var i = -1;
    function callback(exp, p0, p1, p2, p3, p4) {  
        if (exp=='%%') return '%';
        if (arr[++i]===undefined) return undefined;
        var exp  = p2 ? parseInt(p2.substr(1)) : undefined;
        var base = p3 ? parseInt(p3.substr(1)) : undefined;
        var val;
        switch (p4) {
            case 's': val = arr[i]; break;
            case 'c': val = arr[i][0]; break;
            case 'f': val = parseFloat(arr[i]).toFixed(exp); break;
            case 'p': val = parseFloat(arr[i]).toPrecision(exp); break;
            case 'e': val = parseFloat(arr[i]).toExponential(exp); break;
            case 'x': val = parseInt(arr[i]).toString(base?base:16); break;
            case 'd': val = parseFloat(parseInt(arr[i], base?base:10).toPrecision(exp)).toFixed(0); break;
        }
        val = typeof(val)=='object' ? JSON.stringify(val) : val.toString(base);
        var sz = parseInt(p1); /* padding size */
        var ch = p1 && p1[0]=='0' ? '0' : ' '; /* isnull? */
        while (val.length<sz) val = p0 !== undefined ? val+ch : ch+val; /* isminus? */
       return val;
    }
    var regex = /%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd])/g;
    return str.replace(regex, callback);
}

if (!String.prototype.format) {
 String.prototype.format = function() {
  return String.form(this, Array.prototype.slice.call(arguments));
 }
}


alert("<tr><td>%s</td><td>%s</td><td>%5.2f</td></tr>".format( "A" , "B" , 12.534));



피씨에 설정된 기본브라우져로 url 파라미터를 던져 화면을 도시하는 방법


java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://google.com"));


'IT > java' 카테고리의 다른 글

java 의 string format  (1) 2014.12.05




지난번에 이어서 효과를 계속보도록하자~.


제이쿼리의 효과는 show/hide 뿐만아니라 fade, slide 또는 스스로 정의하여 꾸미는 animate 가 있다.



아래 표에서 버튼 클릭으로 간단히 비교해보도록 하자.


 show/hide

 fade

 slide



syntax> fade

$(셀렉터).fadeIn(속도, 콜백함수)

$(셀렉터).fadeOut(속도콜백함수)

$(셀렉터).fadeToggle(속도콜백함수)

$(셀렉터).fadeTo(속도, 투명도, 콜백함수)


속도는 "slow", "fast", "normal" 의 문자열 또는 밀리세컨드(1/1000초) 단위의 숫자를 입력하면 된다.

slow 는 0.6초 , normal 은 0.4초, fast 는 0.2초 이다.

콜백함수는 효과가 완료된 후에 호출할 함수가 있다면 입력한다.

특이하게 fadeTo의 경우 최종 결과의 투명도를 설정할 수 있다.

 1 이 100% 보임, 0.3는 30프로 형태로 소숫점으로 지정이 된다.


예시>

$(셀렉터).fadeIn()        // 0.4 초 동안 fadeIn 한다.


$(셀렉터).fadeIn(2000)  // 2초 동안 fadeIn 한다.


$(셀렉터).fadeOut("fast") // 0.2 초 동안 fadeOut 한다.


$(셀렉터).fadeOut("slow", function(){

         alert("fadeIn 완료");

})  // 0.2초동안 fadeIn 하고 완료시에 콜백함수를 호출한다.


$(셀렉터).fadeToggle() // show/hide의 토글과 같은 효과로 fadeIn 과 fadeOut 을 전환시킨다. 설정된 값이 없기 때문에 시가은 0.4초이다.

$(셀렉터).fadeTo(500, 0.4)  //  0.5초 동안 투명도를 40%로 변경한다.



syntax> slide

$(셀렉터).slideDown(속도, 콜백함수) // slide효과로 보임 상태가 됨

$(셀렉터).slideUp(속도콜백함수)  // slide효과로 숨김 상태가 됨

$(셀렉터).slideToggle(속도콜백함수)



syntax> animate

$(셀렉터).animate({변경할속성목록}, 속도, 콜백함수);


변경할 속성 목록은  { 이름 : 값 , 이름 : 값 ..} 형태이다

예시


$(셀렉터).animate({ width : '300px' });  //특정 속성에 최종 변경값을 세팅

 

$(셀렉터).animate({ height : '300px', width : '+=100px', opacity : '0.5' }); 

// 다중값 변경 및 예시의width 와 같이 현재값에 값을 더하거나 뺄수 있음


$(셀렉터).animate({ height : 'show' });  // show, hide, toggle 을 설정할 수 있음


$(셀렉터).animate({ width : '300px' } , 1000 );  // width 300px 로 1초동안 변경

$(셀렉터).animate({ width : '300px' } , 'slow' , function(){

alert("animate 완료");

});  // width 300px 로 0.6초동안 변경 후 alert 창 도시


기타 특정 셀렉터에 여러개의 animate 를 연속으로 세팅한 경우 각 animate 은 순서대로 하나씩 완료후 다음 animate 가 작동함

var panel = $('.panel');

panel.animate({ width : '300px' });          //  (1)

panel.animate({ opacity: '0.5' }, 'slow');  // (2)

panel.animate({ width : '+=100px' });      //  (3)


이런 식으로 연속적으로 animate 를 사용한 경우   

 (1) 동작 -> (1)완료후 (2)동작 -> (2)완료후 (3)동작


이상~

'IT > jquery' 카테고리의 다른 글

JSON 바인딩하여 HTML 만들기  (0) 2016.01.25
jQuery 플러그인 화면 도시여부 체크  (0) 2016.01.20
[제이쿼리(jQuery)] lesson 5  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 4  (0) 2014.11.24
[제이쿼리(jQuery)] lesson 3  (0) 2014.11.24

java 에서 다양한 format 을 설정하는 Util 을 제공한다.


그중에서 String 의 format 을 살펴보도록 하자.



예시)

String str = String.format("p1 : %s , p2 : %.2f",  "one", 1.234f); // String format 으로 변경된 값을 str 변수에 바인딩

System.out.println(str);


또는


System.out.printf("p1 : %s , p2 : %.2f",  "one", 1.234f);  // 화면에 바로 출력


결과) 두개의 결과는 다음과 같이 같게 나온다.

p1 : one , p2 : 1.23

p1 : one , p2 : 1.23



원리)


이런 식으로 해당 부분에 값이 원하는 포맷형태로 변경되에 바뀌게 된다.


%s 는 스트링, %d 는 숫자, %f 는 실수 대한 변경이다.


스트링의 %s 의 대표적인 기능 및 예시는 다음과 같다.


 항목

 내용

 결과

 %s

 해당 위치의 스트링을 대체한다.

 "one" 

   ▼

 "one"

 %10s

 숫자(10)만큼 문자열 좌측(+)에 공백을 채워 문자열 길이를 만든다.(숫자보다 문자열길이가 긴경우에는 그대로 도시된다)

 "one"

   ▼  (_ 는 공백)

 "_______one"

 %-10s

 숫자(10)만큼 문자열 우측(-)에 공백을 채워 문자열 길이를 만든다.(숫자보다 문자열길이가 긴경우에는 그대로 도시된다)

 "one"

   ▼  (_ 는 공백)

 "one_______"

 %10.2s

 점(.)우측에 해당하는 숫자(2) 만큼 스트링을 자른 후 점(.)좌측 숫자(10)만큼 문자열 좌측에 공백을 채워 문자열 길이를 만든다.

 "one"

   ▼  (_ 는 공백)

 "________on"

 %-10.2s

 점(.)우측에 해당하는 숫자(2) 만큼 스트링을 자른 후 점(.)좌측 숫자(10)만큼 문자열 우측에 공백을 채워 문자열 길이를 만든다.

 "one"

   ▼  (_ 는 공백)

 "on________"



스트링의 %d 의 대표적인 기능 및 예시는 다음과 같다.


 항목

 내용

 결과

 %d

 해당 위치의 숫자로 대체한다.

 123

   ▼

 123

 %10d

 숫자(10)만큼 문자열 좌측(+)에 공백을 채워 숫자열(123) 길이를 만든다.(숫자보다 숫자열길이가 긴경우에는 그대로 도시된다)

 123

   ▼  (_ 는 공백)

 _______123

 %-10d

 숫자(10)만큼 문자열 우측(-)에 공백을 채워 숫자열(123) 길이를 만든다.(숫자보다 숫자열길이가 긴경우에는 그대로 도시된다)

 123

   ▼  (_ 는 공백)

 123_______

 %010d

 숫자(10)만큼 문자열 좌측(+)에 0을 채워 숫자열(123) 길이를 만든다.(숫자보다 숫자열길이가 긴경우에는 그대로 도시된다)

 123

   ▼

 0000000123

 %,d

 1000 단위로 콤마(,) 처리를 한다.

 1234567

   ▼

 1,234,567



스트링의 %f 의 대표적인 기능 및 예시는 다음과 같다.


 항목

 내용

 결과

 %f

 해당 위치의 숫자로 대체한다. 정수일 경우에는 정수만 나오며, 실수는 소숫점 6자리(기본)까지 포함한다.

 123f

   ▼

 123.000000


 123

   ▼ (정수형)

 123

 %12f

 숫자(12)만큼 문자열 좌측(+)에 공백을 채워 숫자열(123)과 소숫점이하 자리를 포함하여 길이를 만든다.(숫소숫점 이하를 포함한 길이가 설정한 숫자열길이가 긴경우에는 그대로 도시된다)

 123f

   ▼  

 __123.000000

 %-12f

 숫자(12)만큼 문자열 우측(-)에 공백을 채워 숫자열(123)과 소숫점이하 자리를 포함하여 길이를 만든다.(소숫점 이하를 포함한 길이가 설정한 숫자열길이가 긴경우에는 그대로 도시된다)

 123f

   ▼  

 123.000000__

 %.2f

 점(.)우측에 해당하는 숫자(2) 만큼 소숫점이하(.456) 자리를 반올림하여 길이를 만든다.

 123.456f

   ▼  

 123.46

 %010.2f

 숫자(10)만큼 문자열 좌측(+)에 0을 채우고 점(.)우측에 해당하는 숫자만큼 소숫점 이하의 숫자를 자른다.(자른 부분은 반올림한며, 소숫점을 자를 부분을 설정하지 않으면 소숫점의 점을 포함한 숫자만큼 0을 채워 길이를 만든다. 숫자값은 달라질 수 있다)

 123.456f

   ▼(반올림)

 0000123.46

 %,.2f

 1000 단위로  콤마(,) 처리를 하고, 점(.)우측에 해당하는 숫자(2) 만큼 소숫점이하(.456) 자리를 반올림하여 길이를 만든다.

 1234.567f

   ▼  

 1,234.57


기타 시간 %t


  항목

 내용

  결과

 %td

  java.util.Date 를 입력받으며 오늘 일자(day)를 제공

 new Date()

  ▼ (오늘 일자 day)  

 08

 %tm

 java.util.Date 를 입력받으며 이번 달(month)를 제공

 new Date()

  ▼ (이번 달 month) 

 12

 %th

 long 형 시간데이터를 입력받으며 이번 달(month)를 제공

 new Date().getTime()

 or System.currentTimeMillis()

 (long 형의 시간 데이터)

  ▼ (이번 달 month) 

 12월

 %ty

 java.util.Date 를 입력받으며 이번 약년(year)를 제공

 new Date()

  ▼ (이번 해 year)

 14

 %tD

 java.util.Date 를 입력받으며 오늘 날짜(월/일/약년)를 제공

 new Date()

  ▼ (오늘날짜 date 월/일/년)

 12/08/14

 %tY

 java.util.Date 를 입력받으며 오늘 년을 제공

 new Date()

  ▼ (이번 해 year)

 2014

 %tF

 java.util.Date 를 입력받으며 오늘 날짜(월/일/년)를 제공

  new Date()

  ▼ (오늘날짜 full)

 2014-12-08

 %tT

 long 형 시간데이터를 입력받으며 현재시간(시:분:초)를 제공

 new Date().getTime()

 or System.currentTimeMillis()

 (long 형의 시간 데이터)

  ▼ (date의 시간 or 현재시간)

 15:19:50

 %tH

 long 형 시간데이터를 입력받으며 시간(24시간 단위)을 제공

 new Date().getTime()

 or System.currentTimeMillis()

 (long 형의 시간 데이터)

  ▼ (date의 시간)

 15

 %tl

 long 형 시간데이터를 입력받으며 시간(12시간 단위)을 제공

 new Date().getTime()

 or System.currentTimeMillis()

 (long 형의 시간 데이터)

  ▼ (date의 시간 12시간단위)

 3

 %tM

 long 형 시간데이터를 입력받으며 분을 제공

 new Date().getTime()

 or System.currentTimeMillis()

 (long 형의 시간 데이터)

  ▼ (date의 분 Minute)

 32

 %tS

 long 형 시간데이터를 입력받으며 초를 제공

 new Date().getTime()

 or System.currentTimeMillis()

 (long 형의 시간 데이터)

  ▼ (date의 초)

 52

 %tL

 long 형 시간데이터를 입력받으며 밀리세컨(1000분의 1초)를 제공

 new Date().getTime()

 or System.currentTimeMillis()

 (long 형의 시간 데이터) 

  ▼ (date의 1000분의1초)

 932



string format 에서 원하는 위치의 파라미터값을 가져다 쓰기 위해서는(같은 파라미터 여러번 가능) 다음과 같다


* syntax

%숫자(1부터시작)$타입

* 예시

System.out.printf("%2$s %1$s","1","2");

System.out.println();

System.out.printf("%1$tY.%1$tm.%1$td %1$tH:%1$tM:%1$tS.%1$tL",new Date().getTime());

* 결과

2 1

2014.12.08 15:46:16.270


기타 상세한 내용은 formatter 의 api 로 확인 가능하다. 

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

'IT > java' 카테고리의 다른 글

브라우져에 파라미터 던져 도시하기  (0) 2015.04.08

강의를 편하게 줌잇(ZoomIt)~~!!



줌잇(ZoomIt) 이라는 유틸을 소개하려 한다.

화면 확대/축소,  그림, 글자 등을 강의중 편리하게 사용하게 해주는 툴이다.




위와 같이 강의를 하다보면 소개 또는 설명을 위해 프리젠테이션으로 준비한 자료이외에 화면을 보여야 할 경우가 많다. 이런 경우에 글자 또는 이미지등이 크기가 빔프로젝트로 잘안보이는 경우에는 강의하는 입장에서는 매우 곤란해 진다.  이럴때 이 유틸은 사용 화면을 확대해서 보여준다면 그러한 문제를 해결할 수 있다.


다운로드 : ZoomIt.exe


위의 파일은 다운로드 받으면된다. 별도의 설치는 필요 없으며, 클릭해서 실행하면 아래와 같은 트레이아이콘이 생긴다.



아이콘을 더블클릭하면 옵션창이 나오는데 여기서 다양한 설정이 가능하다.


1. Zoom 설정



ZoomIt에 대한 기본 설정을 한다. zoom toggle 에 설정된 단축키를 누르면 설정된 배율로 화면이 줌인되고 마우스를 클릭하면 화면에 낙서장 처럼 그릴 수 있는 그리기 상태가 된다. 또한 줌인 상태에서 마우스 휠을 통하여 확대/축소가 가능하다.


위에서 설정된 Ctrl+1 를 통해 화면을 바로 확대할 수 있다.


사용법 : 이것만 알아도 된다~

Ctrl+1 (화면 확대) -> 마우스휠(확대조절) 또는 이동 

-> 마우스좌클릭(그리기 모드) -> 그리면서 설명(마우스로 드래그)


 항목

 설명

 Zoom Toggle

 줌을 실행할 단축키를 변경할 수 있다.

 animate zoom in and zoom out

 줌이 될때 애니메이션 형태 줌을 할 것인지, 단축키를 누르자마자 해당줌으로 화면이 표시될지를 선택한다.(기본은 켜있는 상태이다. 켜있는 상태가 사용시 더 줌되는 위치가 보는 사람에게 명확하게 보여진다.)

 specify the initial level of magnification when  zooming in

 단축키를 눌렀을 때 줌되는 레벨이다. 기본은 두배로 설정되어 있다.



2. LiveZoom



기본 줌은 단축키를 사용해서 줌한 경우에 마치 해당 화면이 이미지처럼 바탕에 보여지는 상태로 화면을 확대/축소/이동을 하다. 다시말해 화면안의 프로그램, 웹화면 등에 대한 클릭 및 기능 사용이 안된다.

라이브 줌은 화면에 보여지는 프로그램들의 기능을 그대로 사용하면서 화면만 확대하는 기능을 제공한다. 라이브 줌 상태에서는 Ctrl+UP(확대), Ctrl+Down(축소) 의 단축키를 제공한다.  실재로 사용하면 자주 사용하지는 않는 기능이다.


항목 

 설명

 LiveZoom Toggle

  라이브 줌의 단축키를 설정한다.



3. Draw



기본 줌을 사용하고 마우스 좌클릭시 바로 그리기 모드가 되는데, draw 에 설정된 단축키를 통해서 줌이 아니어도 언제나 화면에 그리기 상태로 변경할 수 있다.

또한 draw 상태일때는 키보드의 r(빨강), g(초록), b(파랑), o(주황), y(노랑), p(분홍) 키를 누르면 그리기 펜의 색을 변경할 수 있다. 보통 마우스를 펜처럼 사용하여 화면에 표시가 가능하다.

기타 기능으로


shift 키를 누르고 마우스 드래그 : 직선

ctrl 키를 누르고 마우스 드래그 : 사각형

tab 키를 누르고 마우스 드래그 : 원

shift + ctrl 키를 누르고 마우스 드래그 : 화살표


제공한다.


항목 

 설명

 Draw w/out Zoom

  드로우 상태로 변경을 위한 단축키를 설정한다.


* 그리기 예시



위의 그림의 주황색이 ZoomIt 을 통해서 그린 부분이다.


4. Type



그리기(draw) 상태일 때 단축키 t 를 통해서 텍스트를 입력할 수도 있다. 마우스 클릭시 다시 그리기 상태가 된다.


항목 

 설명

 Set Font

  텍스트 입력상태에서 입력되는 텍스트의 글꼴을 설정한다.


5. Break




이 기능은 강의 중간 휴식을 위한 기능이다. 이런 것도 생각했다니 재미있다. 이 기능을 사용하면 휴식시간에 설정된 시간 만큼 화면에 시간 카운트가 시작된다. 10분이면 10:00 -> 0:00 으로 진행된다.





alt-tab 키로 다른 화면으로 변경하여 카운터가 안보이는 경우에는 ZoomIt 트레이 아이콘을 클릭하면 다시 화면에 카운터가 보여진다.

시간은 마우스휠 또는 up/down 키(key) 로 늘리거나 줄일 수 있으며, esc 키로 종료할 수 있다.


항목 

 설명

 Start Timer

 휴식기능의 단축키를 설정한다.

 Timer

 휴식시간의 길이를 설정한다(분단위)

 Show Time Elapsed After Expiration

 이 기능이 켜져 있으면 휴식 시간이 끝난 이후에도 얼마나 더 지나 갔는지를 보여준다

 예)  10:00 휴식 시간이 종료되오 0:00 이 된후 

       시간이 지남에 따라 0:00(-0:25) 이런식으로 보여짐

 기능이 꺼져있다면 휴식시간 종료후 0:00 상태만 보여지게 된다


5.1 Advanced


이 기능은 break 의 Advanced 를 눌렀을 때 나오는 화면이다.



휴식 화면에 대해 좀더 상세히 설정할 수 있다.


항목 

 설명

 Play Sound on Expiration

 휴식이 종료 되면 특정 사운드가 나오도록 하는 기능을 활성화 한다.

 Alarm Sound File

 휴식시간 종료시 동작할 사운드 파일을 선택한다( Play Sound on Expiration 기능이 켜져있을 경우 사용가능하다.)

 Time Opacity

 화면에 도시되는 휴식시간 카운터의 투명도를 변경한다.

 Time Position

 휴식시칸 타운터가 표시될 화면 위치를 정한다.(기본은 중간이다. 캡쳐화면에서는 변경한 상태이다)

 Show background bitmap

 카운터의 배경화면을 사용한다.

 Use faded desktop as background

 컴퓨터의 원래 화면을 희미하게 한 상태로 카운터의 배경화면으로 사용한다(Show background bitmap 을 사용상태에서만 설정 가능하다)

 Use image file as background

 특정 파일을 선택하여 휴식 카운터의 배경화면으로 사용한다.(Show background bitmap 을 사용상태에서만 설정 가능하다)

 Scale to screen

 특정 파일을 선택하여 휴식 카운터의 배경화면으로 사용된 이미지를 화면 크기에 맞도록 조절한다. 이기능이 꺼져 있을 경우 선택된 이미지크기 그대로 화면 중간에 도시된다.(Show background bitmap 을 사용상태에서만 설정 가능하다)




여기 까지가 ZoomIt 의 기능을 살펴보았다.


이렇게 보면 많은 기능을 제공하지만 실재로 사용되는 건 기본 줌 단축키(사용자 변경이 없다면 ctrl+1)과 그리기, 그리고 텍스트 입력(t) 정도만 사용해도 사용하는데 전혀 불편함이 없을 것이라 생각된다.


그렇지만 잊지말아야 할 것은 이러한 유틸은 결국은 보조이며 제일 중요한 것의 강의 그자체의 내용이라 생각된다.


이상~~~

javascript 의 function 을 사용하다 보면,  파라미터에 대해서 arguments 배열에 접근하여 사용하는 경우가 있다.

이를 통해 유동적인 파라미터를 제어하거나, 기존에 제공되는 api 를 커스터마이징도 할 수 있게 된다.


예시 1) string fomat <= 클릭

예시 2) setTimeout 커스터마이징 <= 클릭


function argLength(one, two){

    console.log("argLength.length : " + argLength.length);

    console.log("arguments.length : " + arguments.length);

}

argLength(1,2,3,4);


위 예제의 결과는

argLength.length : 2

arguments.length : 4

가 나오게 된다.

argLength 라는 function 은 선언되면서 가지게되는 몇가지 멤버변수가 있는데, 그중에 length 부분에는 선언시 정의된 파라미터의 개수가 바인딩된다. 

function 호출시에 파라미터는 function 에서 선언된 파라미터에 arguments 값이 순서대로 맵핑되고, 파라미터가 더 적은 경우에는 undefined 를 가지게 되며, 선언파라미터 많은 경우에는 arguments 배열을 통해 접근이 가능하게 된다.


* 호출

argLength(1);

* 결과

argLength.length : 2

arguments.length : 1

이와 같이 호출시에는 argLength 의 two 값은 undefined 가 되게 된다.



* 실행 테스트 function

var argLength = function(one,two){

     //... 중략

}

으로 선언된 function 이 있다.

아래에서 파라미터를 변경하여 실행하면(ex> argLength("홍길동","무인도","정류소") ), 

one, two 의 값과 argLength.length , arguments.length 를 확인할 수 있다.


 실행테스트

 결과

  

 



이상~

+ Recent posts